Lifecycle组件使用方法

2017/5/18 Google IO
Android Architecture Components: 一个新的库集合,可以方便的管理UI组件生命周期和处理数据持久性。帮助您设计健壮的、可测试的和可维护的应用程序。
下文中Fragment、Activity 等组件自身的生命周期直用 “生命周期” 一词,而由 Lifecycle 框架提供的生命周期则称为 “lifecycle”
个人觉得lifecycle简单的理解就是:在组件或工具类中自动接受Event来处理有关”生命周期”的逻辑。实现组件与activity的解耦。

在工程的build.gradle中添加google Maven仓库

maven { url "https://maven.google.com" }

在module的build.gradle中添加如下引用:

//Lifecycle
implementation "android.arch.lifecycle:runtime:1.0.3"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0"

实现自己的组件类,需要实现LifecycleObserver,以下只是一个演示类。

public class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void ON_CREATE() {
        System.out.println("@@@@@@@@MyObserver:ON_CREATE");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void ON_START() {
        System.out.println("@@@@@@@@MyObserver:ON_START");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void ON_RESUME() {
        System.out.println("@@@@@@@@MyObserver:ON_RESUME");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void ON_PAUSE() {
        System.out.println("@@@@@@@@MyObserver:ON_PAUSE");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void ON_STOP() {
        System.out.println("@@@@@@@@MyObserver:ON_STOP");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void ON_DESTROY() {
        System.out.println("@@@@@@@@MyObserver:ON_DESTROY");
    }
}

然后在你的activity中添加声明并添加监听即可。需要注意的是,必须在onCreate方法中调用addObserver方法。

.
.
.
MyObserver myObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myObserver = new MyObserver();
    getLifecycle().addObserver(myObserver);
}
.
.
.

进阶用法:
可以在初始化MyObserver的时候将lifecycle传入,在MyObserver中进行操作时再次确认宿主的”生命周期”状态。例如宿主是Fragment,如果它的Activity处于Saved状态,此时调用回调可能引起崩溃。

if (lifecycle.getCurrentState().isAtLeast(STARTED)) {
   //do something
}

getCurrentState()和生命周期对应关系可参考下图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ocean20/article/details/78900502