Jetpack LifeCycle
程序员文章站
2022-06-07 18:23:18
...
1.LifeCycle的诞生
①.解耦,创建可感知的生命周期组件。
②.降低内存泄漏发生的可能性。
2.使用LifeCycle解耦页面与组件
2.1 案例分析
假设有这样一个需求,当用户打开界面即获取定位位置,通常写法是在Activity中各个声明周期进行相应的地理位置操作。使地理位置这个操作和Activity中的生命周期密不可分,耦合严重。
2.2 LifeCycle的原理
Jetpack提供两个类:LifecycleOwner(被观察者)和LifecycleObserver(观察者)。即通过观察者模式实现对生命周期的监听。
观察者android源码中已经实现,如下:
public class ComponentActivity extends Activity implements
LifecycleOwner,
KeyEventDispatcher.Component {
private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
2.3 解决方案
自定义观察者,并将与Activity生命周期相关的操作放到自定义的观察者里面,如下:
class MyLifeCycleObserver : LifecycleObserver{
constructor(){
//初始化操作
}
/**
* 开始定位
*/
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
private fun onStartGetLocation() {
}
/**
* 结束定位
*/
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private fun onStopGetLocation(){
}
}
MainActivity中的实现如下:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycle.addObserver(MyLifeCycleObserver())
}
}
3. 其他支持LifeCycle的组件
除了Activity,Fragment也是支持的,源码如下:
public class Fragment implements ComponentCallbacks, OnCreateContextMenuListener, LifecycleOwner,
ViewModelStoreOwner, SavedStateRegistryOwner {
@Nullable FragmentViewLifecycleOwner mViewLifecycleOwner;
@Override
@NonNull
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
Service支持LifeCycle,Application支持LifeCycle,需要用ProcessLifeCycleOwner来监听,可以监听程序的整个生命周期
4. Activity中生命周期解析
上一篇: 有关get请求的实例教程
推荐阅读
-
Jetpack系列:Paging组件帮你解决分页加载实现的痛苦
-
带你了解Android Jetpack
-
生命周期感知 Lifecycle
-
Jetpack之Lifecycle的基本使用
-
Android Jetpack-Navigation 使用中参数的传递方法
-
Jetpack Compose 基础环境安装和应用
-
Jetpack Compse 实战 —— 全新的开发体验
-
maven项目-修复Plugin execution not covered by lifecycle configuration: org.codehaus.
-
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.8:add-test-source (execution: add-functional-so
-
Android ABC Jetpack学习之一文学会Navigation(附源码解析和使用封装)