什么是生命周期观察器以及如何正确使用它?

新手上路,请多包涵

我已经阅读了 Android 中的新架构组件。所以,我想问一下什么是生命周期观察者,我们为什么需要它们?在什么情况下有用?感谢您的回答!

原文由 Nazarii Moshenskiy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 518
2 个回答

您可以使用 ProcessLifecycleOwner 获取应用程序的生命周期并添加一个类作为这些事件的观察者。您可以在应用程序类中实现 LifecycleObserver:

 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 ()

State 也有一个 isAtLeast () 方法,我们可以使用它来与当前生命周期状态进行比较

原文由 Alok Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

@OnLifecycleEvent 已被 弃用,因此许多曾经在这里有用的答案不再有用。如果您当前尚未使用 Java 8,则需要先更新您的 build.gradle 。我们现在可以利用 DefaultLifecycleObserverLifecycleEventObserver 。请参阅下面的示例。

首先,您可以使用 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 以及为什么不推荐使用 OnLifecycleEvent 的解释: https ://stackoverflow.com/a/70384221/3422470

原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题