關於 Android 架構組件你需要知道的一切
已發表: 2022-01-02架構組件
架構是一個穩定的計劃,需要在開發過程開始之前製定。 架構組件使應用程序井然有序,將所有組件聯繫在一起,並提供一組庫,幫助您設計健壯、可驗證和可維護的應用程序。 Android 的新架構提出了一些關鍵原則,以創建具有安全性的理想應用程序並避免難以維護和測試的臃腫類。
建築模塊
構建塊的基本示例是活動、視圖、意圖、服務、片段、清單文件、AVD(Android 虛擬設備)。 這些塊是理性應用組件架構的表現,也是開發者痛點的標誌。
第一組幫助你
- 自動管理您的活動和片段生命週期以避免內存和資源洩漏
- 將 Java 數據對象持久化到 SQLite 數據庫
組件:
1.生命週期組件
該組件用於添加生命週期感知。 Lifecycle 組件包括 Lifecycle、LifecycleOwner 和 LifecycleObserver
生命週期
目前為止生命週期是一個由系統本身管理的抽像類。 但在當前場景中,Lifecycle 會在適當的時間識別組件的狀態並相應地執行和結束任務。
生命週期所有者
LifecycleOwner 是一個可以實現從 getLifecycle() 方法獲取生命週期對象的接口。 ProcessLifecycleOwner 在您想要管理整個流程的生命週期時很有用。
生命週期觀察者
LifecycleObserver 觀察 LifecycleOwner 組件,如活動和片段。 它接收 LifecycleOwner.Event 並通過註釋方法對它們做出反應。
通過一起實施這些,我們可以創建生命週期感知應用程序。
實現生命週期觀察者
公共類 TestObserver 實現 LifecycleObserver {
公共 MyObserver(生命週期生命週期){
// 開始生命週期觀察
生命週期.addObserver(this);
...
}
// 當相關的生命週期經歷這些事件時調用的帶註釋的方法
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
公共無效 onResume() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
公共無效 onPause() {
}
}
現在我們可以在我們的應用程序組件中使用這個觀察者,使用以下實現 TestObserver observer = new TestObserver(aLifecycleOwner.getLifecycle());
2. 實時數據
LiveData 組件是一個包含可觀察值的數據持有者。 使用 livedata 每當 Activity 或 Fragment 更新時,我們都會收到通知,因此您的 UI 將始終更新。 它是典型模型的包裝器,可在該模型發生變化時通知觀察者。 livedata 的主要優點是不再有由於視圖不存在而導致的內存洩漏和 NullPointerExceptions。
創建 LiveData 對象
公共類 MyViewModel 擴展了 ViewModel {
// 創建一個帶有字符串的 LiveData
私有 MutableLiveData<String> mData;
公共 MutableLiveData<String> getData() {
if ( mData == null) {
mData = new MutableLiveData<String>();
}
返回 mData;
}
}
觀察 LiveData 對象
以下代碼說明瞭如何觀察 LiveData 對象:
公共類 MyActivity 擴展 AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel 模型 = ViewModelProviders.of(this).get(MyViewModel .class);
model.getData().observe(this, data -> {
// 更新界面
});
}
}3. 查看模型
ViewModel 可用於以生命週期意識的方式為您的 UI 組件(活動或片段)提供和維護數據。 它能夠通過配置更改生存。 因此,如果您破壞活動或更改手機方向,您將不會丟失 ViewModel 和數據。 由於 LiveData 實例位於 ViewModel 類下,因此不需要我們端的輸入。
您無需擔心 UI 中持有者數據的 UI 生命週期。 ViewModel 將通過工廠自動構建,您不需要自己處理創建和拆除。
實現一個視圖模型
它由以下示例代碼說明:
公共類 MyViewModel 擴展了 ViewModel {
私有 MutableLiveData<List<Students>> 學生;
public LiveData<List<Students>> getStudents() {
如果(學生==空){
學生 = 新的 MutableLiveData<List<Students>>();
加載學生();
}
返校學生;
}
私人無效負載學生(){
// 做一個異步操作來獲取學生。
}
}您可以從活動中訪問此列表,如下所示:

公共類 MyActivity 擴展 AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
// 在系統第一次調用活動的 onCreate() 方法時創建一個 ViewModel。
// 重新創建的活動接收與第一個活動創建的相同的 MyViewModel 實例。
MyViewModel 模型 = ViewModelProviders.of(this).get(MyViewModel.class);
model.getStudents ().observe(this, student -> {
// 更新界面
});
}
}4. 房間
Room 是一個數據庫庫,也是 SQLite 數據庫的絕佳替代品。 要使用 SQLite 數據庫,總是需要編寫大量樣板文件。 我們可以通過在 Model 類中添加註解來定義數據庫。 該庫有助於在設備上創建應用程序數據的緩存。 它與 OrmLite 非常相似。
Room 有 3 個主要組件:
一個。 數據庫
當您的應用程序被持久化時,關係數據和包含數據庫持有者,它作為與@Database 註釋的類的底層連接的主要訪問點應滿足以下條件:
是一個擴展 RoomDatabase 的抽像類。
包括與包含註釋的數據庫連接的實體列表。
它返回用@Dao 註釋的類,並包含一個具有 0 個參數的抽象方法。
而在運行時,您可以通過調用 Room.inMemoryDatabaseBuilder() 或 Room.databaseBuilder() 來獲取數據庫的實例。
灣實體
代表數據庫中的一個表。
C。 道
包含用於訪問數據庫的方法。
創建實體
@實體
公共類用戶{
@首要的關鍵
私有的int uid;
@ColumnInfo(name = "first_name")
私人字符串名字;
@ColumnInfo(name = "last_name")
私人字符串姓氏;
// 為簡潔起見,忽略 getter 和 setter,
// 但它們是 Room 工作所必需的。
}創建數據庫
@Database(entities = {User.class}, version = 1)
公共抽像類 AppDatabase 擴展了 RoomDatabase {
私有靜態 AppDatabase 實例;
公共靜態 AppDatabase getDatabase(上下文上下文){
如果(實例 == 空){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_db").build();
}
返回實例;
}
}此類用於創建數據庫並獲取它的實例。 我們使用以下代碼創建數據庫。
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, “my_db”).build();
創建數據訪問對象
使用 @Dao 註釋對類進行註釋。 然後 Room 會生成一個類實現,它實現了接口中定義的方法(與 Retrofit 的工作方式非常相似)。
@Dao
公共接口 UserDao {
@Query("SELECT * FROM 用戶")
列表<用戶> getAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM user WHERE first_name LIKE :first AND "
+ "last_name LIKE :last LIMIT 1")
用戶 findByName(String first, String last);
@插入
void insertAll(用戶...用戶);
@刪除
無效刪除(用戶用戶);
}結論
這篇文章給你一個android架構組件的基礎知識。 我們試圖包含與新提出的 android 架構相關的所有主題,這些主題解決了開發人員在應用程序開發過程中面臨的所有相關問題。 儘管如此,如果您發現任何問題,請考慮聘請 Elsner Technology 的 Android 開發人員。
