关于 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 开发人员