[译]Android架构组件 - 查看Lifecycles - 第三部分
2017-07-19 19:46
274 查看
原文链接:https://riggaroo.co.za/android-architecture-components-looking-lifecycles-part-3/
在这篇博文中,我们将介绍处理生命周期变化的新类。
现在看起来可能不是一个问题,但是如果正在处理一个非常复杂的
最终将花费大量时间来确保在正确的生命周期事件中调用正确的方法。这也意味着不同组件的设计开发人员需要在
任何视频播放器开发人员都了解许多复杂的知识,并且可能会困惑哪里应该调用哪些方法。
可能还需要检查某些方法是否在
新的
实现
接着确保在app的
现在可以创建一个实现了
现在在activity中,需要做的就是添加这个自定义
组件需要了解activity或fragment的生命周期,而这是一个更好的构建组件的解决方案。
(注意:当架构组件不在处于alpha阶段后,
完整示例代码在这里。
在这篇博文中,我们将介绍处理生命周期变化的新类。
问题
让我们想象一下,在应用程序中有一个视频播放器的情况。在同一个activity中,我们也可能会有其他操作,例如收集使用数据和外部事件的监听器(例如 - 网络更改)。通常情况下,最终可能会出现如下所示的代码:
public class VideoActivity extends Activity { @Override protected void onStart(){ videoPlayer.start(); analytics.start(); //.. } @Override protected void onStop(){ videoPlayer.stop(); analytics.stop(); //.. } }
现在看起来可能不是一个问题,但是如果正在处理一个非常复杂的
activity或
fragment,那么通过在不同的生命周期方法中管理组件,
activity可能会变得相当凌乱。
最终将花费大量时间来确保在正确的生命周期事件中调用正确的方法。这也意味着不同组件的设计开发人员需要在
activity生命周期的不同阶段暴露需要调用的相关生命周期方法。他们还需要确保文档正确地涵盖了该代码应放在何处以及为什么存在。
任何视频播放器开发人员都了解许多复杂的知识,并且可能会困惑哪里应该调用哪些方法。
可能还需要检查某些方法是否在
activity处于某种状态时才被调用。例如,如果有一个监听器必须在
onStart方法中注册,但是首先需要执行一些异步操作,则可能该任务在
activity已暂停或停止后才完成。已知的典型解决方案包括保留一些变量来跟踪
activity状态,然后检查该变量或使用RxJava订阅,并在相关的生命周期方法中取消订阅。
解决方法 —— 使用LifecycleObserver
使用新的Android Architecture组件库,现在可以使用更简单的方法来处理生命周期!不需要在每个生命周期方法中单独调用暴露的方法,现在在组件中对自定义方法注解指定的生命周期事件,收到事件后就会触发函数了。新的
Lifecycle类公开了两个枚举,
Event和
State。Event在每个生命周期变化时发出,而State可以在任何时间点访问
Lifecycle对象得到。从官方Android文档解释了这些枚举:
实现
LifecycleObserver时,可以在自定义观察者中注解你的方法。这些方法在生命周期状态变化时执行。一个好的
LifecycleObserver例子是
LiveData类。让我们看看如何实现
LifecycleObserver接口。
使用LifecycleObserver接口创建Lifecycle感知组件
首先在工程级的build.gradle中添加Google Maven仓库。
allprojects { repositories { jcenter() google() } }
接着确保在app的
build.gradle文件中引入了生命周期库:
compile "android.arch.lifecycle:runtime:1.0.0-alpha4" compile "android.arch.lifecycle:extensions:1.0.0-alpha4" annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha4"
现在可以创建一个实现了
Life吃一次LeO不server接口的
ViewPlayerComponent类。接着给每个方法添加相应
@OnLifecycleEvent注解。
public class VideoPlayerComponent implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) void onCreate() { //.. } @OnLifecycleEvent(Lifecycle.Event.ON_START) void onStart() { if (Util.SDK_INT > 23) { initializePlayer(); } } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) void onStop() { if (Util.SDK_INT > 23) { releasePlayer(); } } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) void onPause() { if (Util.SDK_INT <= 23) { releasePlayer(); } } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) void onResume() { if ((Util.SDK_INT <= 23)) { initializePlayer(); } } //.. }
现在在activity中,需要做的就是添加这个自定义
LifecycleObserver来观察当前生命周期。然后,
VideoPlayerComponent将独立运行,而无需在
onStart,
onStop等手动调用不同的方法。
public class VideoPlayerActivity extends LifecycleActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //.. getLifecycle().addObserver(new VideoPlayerComponent(//..)); } }
组件需要了解activity或fragment的生命周期,而这是一个更好的构建组件的解决方案。
(注意:当架构组件不在处于alpha阶段后,
LifecycleActivity和
LifecycleFragment类将被废弃。将来
AppCompatActivity和支持的
Fragment会实现
LifecycleOwner接口。)
完整示例代码在这里。
相关文章推荐
- [译]Android架构组件 – 查看ViewModel – 第二部分
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第一章1-3.任务和后台栈
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第三章3-3日历provider
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第一章1.Activity
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第二章1.Services
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第五章 Android中的进程与线程
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第六章 权限(Permissions)
- [译]Android架构组件 – 查看Room和LiveData – 第一部分
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第七章 App Widgets
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第二章2-1.Bound Service
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第四章 Intents和Intent Filters
- 第三部分:Android 应用程序接口指南---第二节:UI---第十二章 自定义组件
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第二章2-2.AIDL
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第三章3-1Content Provider基础知识
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第一章1-1.Fragment
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第八章 AndroidManifest.xml文件
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第一章1-2.Loaders(装载机)
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第三章3-2创建一个content provider
- 第三部分:Android 应用程序接口指南---第三节:应用程序资源---第一章 资源提供
- Android的架构和应用组件-笔记