我已经阅读了有关Android中新的架构组件的信息。因此,我想问什么是生命周期观察者,为什么我们需要它们?在什么情况下有用? 感谢您的回答!
答案 0 :(得分:1)
参加聚会可能有点晚,但是生命周期的另一个很好的用例(除了明显的ViewModel之类)是,当相关活动被破坏时,让应用程序的许多组件自行注销,或者只是在屏幕外。
例如,我有一个静态工厂来创建对话框,并且使用生命周期,我可以使用旧的Dialog mDialog = ...
和{{1} }
某些代码:
void onPause(){ ... if (mDialog !null && mDialog.isShowing()) mDialog.cancel() }
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 events和states进行交互;因此您可以监视前台和后台生命周期事件。
以下是一些常用用法的有用链接
答案 4 :(得分:0)
lifecycle-extensions
API已弃用。
lifecycle-extensions 工件弃用:使用上述弃用 的
ViewModelProviders.of()
版本中,此版本标志着lifecycle-extensions
中的最后一个API,现在该工件应为 被认为已全部弃用。我们强烈建议您 在所需的特定生命周期工件上(例如lifecycle-service
(如果您使用的是LifecycleService
和lifecycle-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