Jetpack组件Android笔记Jetpack

LifeCycle

2019-03-28  本文已影响0人  麻油里

LifeCycle是GoogleApp架构中推荐的一个组件

作用

简单的说就是用来监听Activity与Fragment的生命周期变化。

场景

LifeCycle的两个角色

如何使用

LifeCycleOwner

AppCompatActivity与V4中的Fragment都已默认实现了LifeCyclerOwner接口,所以可以直接使用。LifeCyclerOwner接口很简单,如下:

public interface LifecycleOwner {
   
    Lifecycle getLifecycle();
}
LifeCycleObserver

生命周期观察者需要实现LifeCycleObserver接口,这个接口没有任何方法。那他如何对生命周期进行观察呢?答案是依赖注解-->OnLifecycleEvent

/**
 * Marks a class as a LifecycleObserver. It does not have any methods, instead, relies on
 * {@link OnLifecycleEvent} annotated methods.
 * <p>
 * @see Lifecycle Lifecycle - for samples and usage patterns.
 */
@SuppressWarnings("WeakerAccess")
public interface LifecycleObserver {

}

这个修饰方法的注解定义了一个Lifecycle.Event类型的值

@SuppressWarnings("unused")
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnLifecycleEvent {
    Lifecycle.Event value();
}

最终LifeCycleObserver的实现类如下

public class MyLifeCycleObserver implements LifecycleObserver{

    private static final String TAG="MyLifeCycleObserver";

    public MyLifeCycleObserver() {

    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onActivityResume(){
        Log.d(TAG,"onActivityResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onActivityPause(){
        Log.d(TAG,"onActivityPause");
    }
}

这里LifeCycleObserver对LifeCycleOwner的ON_RESUME和ON_PAUSE方法进行了观察,在LifeCycleOwner的生命周期产生变化的时候会调用LifeCycleObserver中注解修饰的方法。

两个角色定义好后,需要让他们之间建立联系

很简单,一行代码即可。上面说过了AppCompatActivity已经实现了LifeCycleOwner接口。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLifecycle().addObserver(new MyLifeCycleObserver());
    }

}

运行过后,在Activity OnResume和OnPause的时候,就会Log出对应的信息。

判断当前处在的生命周期

Lifecycle允许其他的对象判断当前的生命周期状态。方法如下

if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
            // do something After Started
}

这个方法不是用来判断是否处于某个状态,而且用来判断是否到达了某个状态。

自定义LifecycleOwner

上面说了,AppCompatActivity与V4中的Fragment都已默认实现了LifeCyclerOwner接口,基本上可以应对所有的情况了,并且,自定义LifecycleOwner方法也比较简单,就直接贴代码了。

public class MyActivity extends Activity implements LifecycleOwner {
    private LifecycleRegistry mLifecycleRegistry;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mLifecycleRegistry = new LifecycleRegistry(this);
        mLifecycleRegistry.markState(Lifecycle.State.CREATED);
    }

    @Override
    public void onStart() {
        super.onStart();
        mLifecycleRegistry.markState(Lifecycle.State.STARTED);
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
}

其实就是两步走,先注册,然后在各个生命周期内做标记。

总结

LifeCycle组件实际上并没有带来什么新的功能,他通过观察者模式+注解来让我们更方便的监听Activity和Fragment的生命周期变化。

上一篇下一篇

猜你喜欢

热点阅读