从而不引起应用程序的变化(从而不引起应用程序的变化,称为)从而不引起应用程序的变化(从而不引起应用程序的变化,称为)

关注健康
关注真实体验

从而不引起应用程序的变化(从而不引起应用程序的变化,称为)

从而不引起应用程序的变化(从而不引起应用程序的变化,称为)

Android Jetpack是一组软件组件、库、工具和指南,可帮助开发强大的Android应用程序。Jetpack于 2018年由 Google 推出,包括现有的 android 支持库、android 架构组件以及作为单个模块化实体添加的 Android KTX 库。如今,Google Play 商店中近 99% 的应用程序都使用 Android Jetpack 库。此外,为了处理数据和应用程序生命周期的变化/更新,谷歌引入了架构组件. 本文详细解释了该组件的每个库。Jetpack 包含大量库,这些库的构建方式可以协同工作并构建强大的移动应用程序。其软件组件分为 4 类:

基础组件架构组件行为组件用户界面组件

此外,架构组件可以分类如下:

RoomWorkManagerLifecycleViewModelLiveDataNavigationPagingData Binding

Android Jetpack 及其架构组件定义了一些关键原则,作为开发良好且强大的移动应用程序的安全途径,应该遵循这些原则。它不支持任何特定的架构模式,但建议将关注点和 UI 与模型的控制明确分离。通过遵循这些规则,开发人员可以避免与生命周期相关的问题,并且可以轻松测试和维护应用程序。

以下是架构组件的元素及其职责View 层由Activity / Fragment表示。它们只处理用户交互和观察以及展示取自ViewModel的LiveData元素。ViewMode l 对View的 Lifecycle 进行检查,并负责在设备的配置更改或其他 android 生命周期事件期间保持数据的一致性。Repository是一个没有适当实现的类,负责从所有来源收集数据。它处理所有数据并将它们转换为可观察的 LiveData并使其可供ViewModel 访问。Room是一个 SQLite 映射库,它克服了SQLite 数据库的挑战,例如编写样板代码和在编译时进行查询检查。它能够使用可观察的 LiveData直接返回查询。在应用程序中包含 Android Jetpack 库的方法在应用项目的build.gradle 文件中添加 google 存储库。

buildscript {

repositories {

google()

mavenCentral()

}

Google Maven 存储库中提供了所有 Jetpack 组件,将它们包含在build.gradle文件中

allprojects {

repositories {

google()

mavenCentral()

}

}

架构组件1. 房间组件

SQLite从一开始就满足了Android中数据库的需求。但是,它有一些严重的缺点,例如在编译时不检查查询,不保存普通的旧 Java 对象(通常称为POJO)。开发人员还需要编写大量样板代码,以使 SQLite 数据库在 Android OS 环境中工作。Room 组件作为SQLite 对象映射库出现,它克服了所有提到的挑战。Room 将查询直接转换为对象,在编译时检查查询中的错误,并且还能够持久化 Java POJO。

此外,它会根据给定的查询结果生成 LiveData 结果/可观察数据。由于 Room 组件的这种多功能性,Google 官方支持并推荐开发者使用它。Room 由以下子组件组成:

实体:它是 Room 在数据库中为其创建表的带注释的类。类的字段表示表中的列。DAO(Data Access Object):负责定义访问数据库和执行操作的方法。数据库:它是一个扩展RoomDatabase类的抽象类,它充当底层应用程序关系数据的主要访问点。

房间组件的优点:

减少样板代码简化数据库访问机制易于实施迁移测试能力高2.工作经理

WorkManager API 提供了一个最佳解决方案来管理 Android 中的后台任务,这些任务本质上是可延迟的(可以稍后运行并且仍然有用)以及有保证的(即使设备重新启动也可以运行)。它能够涵盖 Android 的省电功能以及在有或没有 Google Play 服务的情况下运行的能力是它在开发人员中受欢迎的原因。此外,它还向后兼容 API 级别 14。

android 设备能够分块下载文件/文档,即偶尔(如用户根据 WiFi 网络的可用性恢复下载)以及即使设备重新启动也可以保存下载状态的功能,这仅是因为 WorkManager API . 它的任务执行取决于用户提出请求的顺序,并且对于每个工作请求,它返回显示在设备 UI 上的状态。

WorkManager 组件的优点:

提供向后兼容性任务的调度和链接是可能的用户可以跟踪/状态的任务。3. 生命周期感知组件

android 组件的生命周期状态的详细信息存储在Lifecycle类中,它允许其他组件/对象观察此状态。如果一个 android 组件能够检测到其他组件生命周期状态的变化并做出相应的响应,那么它就是生命周期感知的。对于开发人员来说,正确管理应用程序生命周期是一项具有挑战性的任务,因为它可能导致内存泄漏和应用程序崩溃等严重问题。android.arch.lifecycle包通过管理系统直接附加到组件的生命周期来方便开发人员。通过在所需类中实现LifecycleObserver接口,可以将其配置为生命周期感知。

有两种方法可以创建生命周期感知的 Activity / Fragment:

扩展 LifecycleActivity 或 LifecycleFragment

class MainActivity : LifecycleActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

}

}

通过注解连接 LifecycleObserver 和 Lifecycle 事件

class MainActivityObserver : LifecycleObserver, AnkoLogger {

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

fun onResume() {

info(“onResume”)

}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

fun onPause() {

info(“onPause”)

}

}

生命周期感知组件的优势:

帮助创建有组织的应用程序组件易于测试和维护组件执行任务所需的代码更少4.视图模型

ViewModel 是支持 UI 组件数据的 Android Jetpack 架构组件中最关键的类之一。其目的是保存和管理与 UI 相关的数据。此外,它的主要功能是保持完整性,并允许数据在屏幕旋转等配置更改期间提供服务。Android 设备中任何类型的配置更改都会重新创建应用程序的整个活动。这意味着如果数据没有从被破坏的活动中正确保存和恢复,数据将会丢失。为避免这些问题,建议将所有 UI 数据存储在 ViewModel 而不是 Activity 中。

Activity 必须扩展 ViewModel 类才能创建视图模型:

class MainActivityViewModel : ViewModel() {

…………

……..

}

ViewModel 组件的优点:

有助于在配置更改期间进行数据管理减少 UI 错误和崩溃软件设计的最佳实践5. 实时数据

该组件是一个可观察的数据持有者类,即可以观察到包含的值。LiveData 是一个生命周期感知组件,因此它根据其他应用程序组件的生命周期状态执行其功能。此外,如果观察者的生命周期状态处于活动状态,即 STARTED 或 RESUMED,则只有 LiveData 更新应用程序组件。LiveData 总是在进行任何更新之前检查观察者的状态,以确保观察者必须处于活动状态才能接收它。如果观察者的生命周期状态被破坏,LiveData 能够将其移除,从而避免内存泄漏。它使数据同步的任务更容易。

LiveData需要实现onActiveonInactive方法:

class LocationLiveData(context: Context)

: LiveData<Location>(), AnkoLogger, LocationListener {

private val locationManager: LocationManager =

context.getSystemService(Context.LOCATION_SERVICE) as LocationManager

override fun onActive() {

info(“onActive”)

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, this)

}

override fun onInactive() {

info(“onInactive”)

locationManager.removeUpdates(this)

}

// ….

}

为了观察 LiveData 组件观察者(LifecycleOwner, Observer<T>)方法被调用:

fun observeLocation() {

val location = LocationLiveData(this)

location.observe(this,

Observer { location ->

info(“location: $location”)

})

}

}

LiveData 组件的优点:

UI 根据数据中的适当变化进行更新它删除了停止或破坏的活动,从而减少了应用程序崩溃的机会没有内存泄漏,因为 LiveData 是一个生命周期感知组件。6.导航组件

Android 架构的导航组件是设计应用内 UI 的框架。开发人员可以按照单活动应用程序架构来构建应用程序 UI。导航管理与应用程序中的片段事务相关的复杂性。它还便于开发人员显示转换和返回行为

通过使用导航组件,您可以获得其他架构组件以及LifecycleViewModel的所有好处。它有助于实现基本的导航样式,比如简单的按钮点击到复杂的导航模式,比如应用栏和导航抽屉。此外,它还支持深度链接和帮助程序,使该组件能够与导航抽屉和底部导航连接。

导航组件的优点:

通过动画可视化简化过渡支持深度链接处理分片交易支持常见和复杂的导航模式7. 分页

在开发 android 应用程序时,组织数据加载过程非常重要。大多数情况下,应用程序一次显示一个活动/片段,因此只需要加载和显示一小部分数据。但是,与此同时,该应用程序正在处理一个当前无用的大型数据集。因此,这是必须处理的应用程序的关键区域,否则会导致设备电池和网络带宽的浪费。

Android 架构组件的Paging 库为这些问题提供了最佳解决方案。该库提供了以谨慎的方式缓慢加载应用程序数据的工具。此外,对于那些显示数据不断更新的应用程序,分页是一个非常协作的库,因为它提供了无界站点列表以及大型但有界列表。以下是通过分页库加载数据的三种常用方式:

加载数据存储在设备数据库中通过充当数据库的缓存通过网络加载数据通过从后端服务器服务加载数据

Paging 组件的优点:

易于与 Recycler View 集成以显示大型数据集。与 LiveData 和 RxJava 兼容,用于更新 UI 数据谨慎地逐渐加载数据8. 数据绑定

数据绑定库是一个支持库,它提供了将活动/片段中的 UI 组件绑定到应用程序的数据源的功能。该库以声明性格式而不是以编程方式执行此绑定任务。下面是一个准确理解这个库工作的例子:

要查找TextView小部件并将其绑定到 ViewModel 变量的 userName 属性,请调用findViewById()方法:

TextView textView = findViewById(R.id.sample_text);

textView.setText(viewModel.getUserName());

使用Data Binding库后,上面的代码通过赋值表达式的变化如下:

<文本视图

android:text=”@={viewmodel.userName}” />

数据绑定组件的优点:

通过删除活动中调用的 UI 框架,使代码更简单且易于维护。允许类和方法观察数据的变化允许将对象和填充对象作为可观察的集合工作。

添加 Jetpack 架构组件(例如 LiveData 和 ViewModel)的代码片段:

dependencies {

def lifecycle_version = “2.3.1”

implementation “androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version”

implementation “androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version”

}

未经允许不得转载: 九月健康网» 从而不引起应用程序的变化(从而不引起应用程序的变化,称为)
分享到: 更多 ( 0)