- 【Android】【框架】【Jetpack】【Architect
- 【Android】【框架】【Jetpack】【Architect
- 【Android】【框架】【Jetpack】【Architect
- 【Android】【框架】【Jetpack】【Architect
- 【Android】【框架】【Jetpack】【Architect
- Android Jetpack架构组件-Room升级
- Android Jetpack, Clean Architect
- Android JetPack ComPose 开发之路 ——
- 理解Android-architecture (一) todo
- Android Jetpack之Lifecycles源码分析
接入
// 非 androidX 项目
implementation "android.arch.lifecycle:runtime:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
// androidX 项目
implementation "androidx.lifecycle:lifecycle-runtime:2.0.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.0.0"
使用
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLifecycle().addObserver(new MyObserver());
}
}
原理分析
编译时扫描OnLifecycleEvent注解,缓存类、方法路径
基类Activity默认会创建一个LifecycleRegistry,getLifecycle可以获取到
在Activity不同的生命周期,会调用比如this.mLifecycleRegistry.markState(State.CREATED)更新状态
通过LifecycleRegistry发布通知
根据注解去匹配方法,调用对应方法
这也是一种观察者
可以看到Jetpack系列组件大量使用了编译器行为、观察者、面向数据等手段在简化代码
一点思考
1、有点美中不足的地方
@SuppressWarnings("unused")
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnLifecycleEvent {
Lifecycle.Event value();
}
public enum Event {
ON_CREATE,
ON_START,
ON_RESUME,
ON_PAUSE,
ON_STOP,
ON_DESTROY,
ON_ANY
}
该注解仅支持这些行为
其实应该支持更多行为的
比如自己希望定制一些行为,也可以使用这个框架
所以注解的参数应该是String类型的,这样可配置
2、生命周期MVP
MVP需要结合生命周期,很多时候,这是刚性的需求
所以可以让Presenter实现LifecycleObserver接口即可,十分方便
3、有个类似的registerActivityLifecycleCallback
它其实也是监控Activity、Fragmeent的生命周期,而且是全局的
有个需求我需要改的东西在三方库组件内,最后和同事评估了下,打算通过registerActivityLifecycleCallback去做,最终十分方便地解决了问题
建议它和Jetpack Lifecycle一同使用,可以解决大部分场景的问题
后记
有什么写得错误、让人费解或遗漏的地方,希望可以不吝赐教,我会马上更改
网友评论