什么是生命周期观察者,如何正确使用它?
我读过关于Android中新的架构组件的信息。所以,我想问什么是生命周期观察者,为什么我们需要它们?在什么情况下它是有用的?感谢您的回答!
我读过关于Android中新的架构组件的信息。所以,我想问什么是生命周期观察者,为什么我们需要它们?在什么情况下它是有用的?感谢您的回答!
您可以使用 ProcessLifecycleOwner 获取应用程序的 LifeCycle,并添加一个类作为这些事件的观察者。您可以在应用程序类中实现生命周期观察器:
public class MyApplication extends MultiDexApplication implements LifecycleObserver
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
添加以下生命周期方法,以观察应用何时进入后台或前台:
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void appInResumeState() {
Toast.makeText(this,"In Foreground",Toast.LENGTH_LONG).show();
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void appInPauseState() {
Toast.makeText(this,"In Background",Toast.LENGTH_LONG).show();
}
在 build.gradle 文件中添加以下内容
implementation 'android.arch.lifecycle:extensions:1.1.1'
也在活动或片段中
您还可以使用它们来降低代码的复杂性,方法是创建实现 LifecycleObserver 的不同组件,然后将活动的生命周期传递给这些组件。通过这种方式,您可以将巨大的复杂性拆分为不同的组件。
class MainActivity : AppCompatActivity(), LifecycleObserver {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ReduceComplexComponent().registerLifecycle(lifecycle)
}
}
class ReduceComplexComponent : LifecycleObserver{
registerLifecycle(lifecycle : Lifecycle){
lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun resume() {
Log.d("OnResume","ON_RESUME")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun pause() {
Log.d("onPause","ON_PAUSE")
}
}
这样,您就可以在单独的组件中侦听活动或片段生命周期事件。
我们还可以在 Activity 中手动获取生命周期实例的当前状态,并且可以使用其 getCurrentState 来执行此操作()
状态还有一个 isAtLeast() 方法,我们可以使用它来与当前生命周期状态进行比较
@OnLifecycleEvent
已被弃用,因此许多曾经在这里有用的答案不再有用。如果您当前尚未使用 Java 8,则需要更新您的第一个 Java 8。我们现在可以使用 或 .请参阅下面的示例。build.gradle
DefaultLifecycleObserver
LifecycleEventObserver
首先,您可以使用 来获取应用程序的生命周期:ProcessLifecycleOwner
ProcessLifecycleOwner.get().getLifecycle()
DefaultLifecycleObserver
:
lifecycle.addObserver(object: DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
TODO()
}
override fun onPause(owner: LifecycleOwner) {
TODO()
super.onPause(owner)
}
})
LifecycleEventObserver
:
lifecycle.addObserver(object: LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when (event) {
Lifecycle.Event.ON_RESUME -> TODO()
Lifecycle.Event.ON_PAUSE -> TODO()
else -> { }
}
}
})
如何更新到Java 8以及为什么不推荐使用的解释:https://stackoverflow.com/a/70384221/3422470OnLifecycleEvent