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

时间:2018-09-17 14:00:48

标签: java android mvvm android-lifecycle android-livedata

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

5 个答案:

答案 0 :(得分:1)

参加聚会可能有点晚,但是生命周期的另一个很好的用例(除了明显的ViewModel之类)是,当相关活动被破坏时,让应用程序的许多组件自行注销,或者只是在屏幕外。

例如,我有一个静态工厂来创建对话框,并且使用生命周期,我可以使用旧的Dialog mDialog = ...和{{1} }

某些代码:

DialogUtils.java:

void onPause(){ ... if (mDialog !null && mDialog.isShowing()) mDialog.cancel() }

MyActivity.java:

public static void showConfirmDialog(Lifecycle lifecycle, String title, String msg, Runnable okRunnable) {
    AlertDialog dialog = AlertDialog.Builder(mAppContext)
    /* configuration stuff ... */
        .build();

    dialog.show();

    lifecycle.addObserver(new LifecycleObserver() {
          @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
          public void cancelDialog() {
            if (dialog.isShowing()) { // if not already dismissed by main-button tap 
              dialog.cancel();
            }
          }
    });
}

答案 1 :(得分:1)

使用它们是为了减少由于应用Lifecycle events而引起的组件的回调和清除。例如,您有一个Handler/Runnable从某个地方的Thread运行,并且需要有一些回调/接口,以便在调用listener时停止并删除onStop() ;因此,使用新的“ Jetpack LifeCycle Architecture组件”,您可以使组件/类具有“生命周期感知”,从而可以通过使用它的Activity / Fragment轻松地对其进行控制!

如上所述的更多信息:https://developer.android.com/topic/libraries/architecture/lifecycle

答案 2 :(得分:0)

您可以将ProcessLifecycleOwner用于应用程序生命周期事件。您可以在应用程序类中实现Lifecycler Observer

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

//在Android清单中添加

implementation 'android.arch.lifecycle:extensions:1.1.1'

答案 3 :(得分:0)

LifeCycleObserver是Google发布的Android Jetpack LifeCycle Architecture组件的一部分,并且它是一个界面,可让您观察可感知LifeCycle的可观察组件,通常是LifeCycleOwner(活动/片段),以便与与此组件关联的LifeCycle eventsstates进行交互;因此您可以监视前台和后台生命周期事件。

以下是一些常用用法的有用链接

答案 4 :(得分:0)

lifecycle-extensions API已弃用。

lifecycle-extensions 工件弃用:使用上述弃用 的ViewModelProviders.of()版本中,此版本标志着 lifecycle-extensions中的最后一个API,现在该工件应为 被认为已全部弃用。我们强烈建议您 在所需的特定生命周期工件上(例如 lifecycle-service(如果您使用的是LifecycleServicelifecycle-process(如果您使用的是ProcessLifecycleOwner),而不是 lifecycle-extensions,因为将来2.3.0不会发布 lifecycle-extensions

如果您想继续使用ProcessLifecycleOwner, 建议添加此依赖项:

implementation "androidx.lifecycle:lifecycle-process:2.2.0"

参考:
https://developer.android.com/jetpack/androidx/releases/lifecycle#version_220_3

https://androidx.tech/artifacts/lifecycle/lifecycle-extensions/

https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner