LifecycleObserever 与 Android 中的活动
LifecycleObserever is Observer 是 Jetpack Architecture 组件之一,是一个接口,它根据 Lifecycle 所有者的 Lifecycle 更改来观察和执行指定的任务。比如 MainActivity 有自己的生命周期,它本身就是 Lifecycle 的拥有者,我们可以实现 LifecycleObserever 接口,将这个观察者附加到 MainActivity 上,这样随着 MainActivity 生命周期的变化,可以执行某些操作。在本文中,展示了 LifecycleObserever 如何在 Lifecycle 所有者的生命周期更改时执行任务。请观看以下视频以了解讨论的概述。
Note: This discussion is implemented using the Kotlin language.
为 Android 应用程序实现 LifecycleObserever 的步骤
第 1 步:创建一个空的活动项目
创建一个空的活动 Android Studio 项目并选择Kotlin作为编程语言。参考安卓 |如何在 Android Studio 中创建/启动新项目?
第 2 步:添加所需的依赖项
将以下依赖项添加到应用级 Gradle 文件中。依赖是生命周期的
// Lifecycles only (without ViewModel or LiveData)
implementation “androidx.lifecycle:lifecycle-runtime-ktx:2.3.1”
// Annotation processor
kapt “androidx.lifecycle:lifecycle-compiler:2.3.1”
Note: The version may differ in future.
并在应用级 gradle 文件下的插件中启用 kapt 插件。
plugins {
id ‘com.android.application’
id ‘kotlin-android’
id ‘kotlin-kapt’
}
如果无法获得如何添加依赖项,请查看以下图像。
第 3 步:使用 acitivity_main.xml 文件
应用程序的主要布局是activity_main.xml 文件只包含一个TextView。要实现 UI,请调用activity_main.xml文件中的以下代码。
XML
Kotlin
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class MainActivityObserver : LifecycleObserver {
private val TAG = javaClass.simpleName
// To observe the onCreate state of MainActivity
// and perform the assigned tasks
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreatePerformTask() {
// here for demonstration purpose the Log messages are printed in logcat
// one may perform their own custom tasks
Log.i(TAG, "I\'m inside Observer of MainActivity ON_CREATE")
}
// To observe the onResume state of MainActivity
// and perform the assigned tasks
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumePerformTask() {
// here for demonstration purpose the Log messages are printed in logcat
// one may perform their own custom tasks
Log.i(TAG, "I\'m inside Observer of MainActivity ON_RESUME")
}
}
Kotlin
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// attach the MainActivityObserver
// to the MainActivity as follows
lifecycle.addObserver(MainActivityObserver())
}
}
输出界面:
第 4 步:创建一个实现 LifecycleObserver 的类
创建一个类MainActivityObserver.kt ,它实现 LifecycleObserver 接口,该接口包含在所有者的生命周期发生变化时执行指定任务的功能。在这种情况下,所有者是MainActivity.kt ,它有自己的生命周期。通过下面的类,观察MainActivity生命周期的变化。在 MainActivityObserver.kt文件中调用以下代码。
科特林
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class MainActivityObserver : LifecycleObserver {
private val TAG = javaClass.simpleName
// To observe the onCreate state of MainActivity
// and perform the assigned tasks
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreatePerformTask() {
// here for demonstration purpose the Log messages are printed in logcat
// one may perform their own custom tasks
Log.i(TAG, "I\'m inside Observer of MainActivity ON_CREATE")
}
// To observe the onResume state of MainActivity
// and perform the assigned tasks
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumePerformTask() {
// here for demonstration purpose the Log messages are printed in logcat
// one may perform their own custom tasks
Log.i(TAG, "I\'m inside Observer of MainActivity ON_RESUME")
}
}
步骤 5:将 MainActivityObserver 附加到 MainActivity.kt 文件
现在需要通过附加观察者MainActivityObserver来通知活动,以便在活动状态发生变化时可以执行所需的任务。在 MainActivity.kt文件中调用以下代码。
科特林
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// attach the MainActivityObserver
// to the MainActivity as follows
lifecycle.addObserver(MainActivityObserver())
}
}
输出:
这里的输出显示在 logcat 中,因为观察者类中有一个 info logging 语句。