📜  Android中的Jetpack体系结构组件(1)

📅  最后修改于: 2023-12-03 14:59:17.140000             🧑  作者: Mango

Android中的Jetpack体系结构组件

Jetpack是一个由谷歌提供的Android库集合,旨在帮助开发者更容易地构建高质量、稳定的Android应用。Jetpack包含了一系列的Android架构组件,被设计成在各种不同类型的Android应用中通用和模块化的架构指南。

架构组件
Lifecycle

Lifecycle组件提供了让Android应用生命周期行为变得更加可管理和可预测的方法。例如,当屏幕旋转时,您的应用不需要重新开始。您可以使用Lifecycle API在不同的组件之间协调生命周期,从而使您的应用具有更好的性能,并且更加易于测试。

class MyActivity : AppCompatActivity() {

    private lateinit var myLocationListener: MyLocationListener

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        myLocationListener = MyLocationListener(this, lifecycle) { location ->
            // update UI
        }
        lifecycle.addObserver(myLocationListener)
    }
}
ViewModel

ViewModel是一个可用于存储和管理UI相关数据的类。当配置更改(例如旋转)时,ViewModel会存储和维护数据。当Activity重新创建时,数据将转移到新Activity中。ViewModel还提供了一种在Activity和Fragment之间共享数据的方法。

class MyViewModel : ViewModel() {

    private val usersLiveData = MutableLiveData<List<User>>()

    fun getUsersLiveData(): LiveData<List<User>> = usersLiveData

    fun loadUsers() {
        // load data
        usersLiveData.postValue(users)
    }
}
Room

Room是一个SQLite数据库的抽象层,为了更容易地管理数据而设计。Room使用注解处理器来帮助您生成基于Java的访问对象,这些对象与数据库表的行(即实例化对象)相对应。

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Insert
    fun insertAll(users: List<User>)
}

@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}
Paging

Paging组件是一个库,它使得从本地存储和网络资源异步加载和展示数据列表变得更加容易。Paging库可以自动处理数据预取和网络错误,并可以使用RecyclerView.Adapter进行无缝集成。

val factory = MyPagingSourceFactory()

val pager = Pager(
    config = PagingConfig(
        pageSize = 20,
        enablePlaceholders = false
    ),
    pagingSourceFactory = { factory.create() }
).flow

pager.collectLatest { data ->
    // update RecyclerView
}
Navigation

Navigation组件是一个库,它可以使得在应用程序中进行导航变得更加容易。Navigation组件将所有的导航逻辑从您的Activity和Fragment中抽取出来,并以可视化的方式进行编辑,展示了应用程序中的全部导航路径。Navigation库还可以处理系统级别的返回,并根据您应用程序的UI模版和模式来生成适当的转场动画。

<fragment android:id="@+id/myFragment"
          android:name="com.example.MyFragment"
          android:label="MyFragment">
    <action android:id="@+id/action_myFragment_to_secondFragment"
            app:destination="@id/secondFragment"
            app:popUpTo="@id/myFragment"
            app:popUpToInclusive="true"/>
</fragment>
总结

Jetpack的架构组件可以帮助您构建更高质量、更稳定的Android应用,使得应用的开发变得更加容易。Lifecycle、ViewModel、Room、Paging和Navigation是这里介绍的5个核心组件,但是Jetpack还提供了许多其他有用的组件,例如Data Binding、WorkManager、LiveData等。