Jetpack系列:谈应用如何优雅的感知生命周期

 

Jetpack系列:谈应用如何优雅的感知生命周期_第1张图片

 

每一个做Android APP的人都有一种痛苦,那就是对Activity和Fragment生命周期过程中数据处理的痛苦。时常出现的生命周期外的数据操作导致的内存泄漏甚至是应用程序崩溃更让人头大。

 

Android针对开发者这一痛点,增加了LifeCycle生命周期感知组件,使用此组件可以将生命周期管理的模板代码抽离出来,让开发者只需要关注具体的业务功能实现,组织更好、更轻量的代码,易于维护。下面我们来看下如何在项目中使用LifeCycle进行生命周期的感知功能。


LifeCycle的使用有两种情况,一种为基于Activity或Fragment生命周期监听,另一种是基于Application生命周期监听。

 

不论是哪种方式监听生命周期变化,都是通过实现LifecycleOwner接口,在生命周期变化时发送Event或更改State值,从而通知所注册的实现LifecycleObserver接口的对象做数据处理。

 

基于Application的生命周期监听可以视为所有Activity的组合,进程内Activity和Fragment的onPause,onStop事件将会延迟发送,下面对比两种方式的区别。

 

生命周期

Activity&Fragment

监听Activity或Fragment的生命周期来做数据的处理方法有两种:

  • 应用继承androidx下的AppCompatActivity类,其实现了

LifecycleOwner接口,需要开发者自定义实现LifecycleObserver添加观察器,实现数据修改逻辑

  • 开发者通过定义LifecycleRegistry对象,添加观察器,在生命周期各个阶段进行状态变化,通知数据进行处理。

 

1. Activity继承AppCompatActivity...import androidx.appcompat.app.AppCompatActivity;...public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        ...        getLifecycle().addObserver(new DataObserver());        ...    }        class DataObserver implements LifecycleObserver {        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)        public void connect() {            Log.d(TAG, "activity onresume,then connect");        }        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)        public void disconnect() {            Log.d(TAG, "activity onpause, then disconnect");        }    }}2. 通过LifecycleRegistry更改状态//onCreatelifecycleRegistry = new LifecycleRegistry(this);lifecycleRegistry.setCurrentState(Lifecycle.State.CREATED);lifecycleRegistry.addObserver(new DataObserver());//onResumelifecycleRegistry.setCurrentState(Lifecycle.State.RESUMED);//onPauselifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);

生命周期

Application

Application生命周期的监听,通过ProcessLifeCycleOwner来完成。

//onCreateProcessLifecycleOwner.get().getLifecycle().addObserver(new DataObserver());

生命周期

差异点

1. 使用Activity&Fragment监控生命周期//点击图标启动D/SecondActivity: activity onCreateD/SecondActivity: activity onStartD/SecondActivity: activity onResume//应用内进入其他界面D/SecondActivity: activity onPauseD/SecondActivity: activity onStop//应用内返回当前界面D/SecondActivity: activity onStartD/SecondActivity: activity onResumeD/SecondActivity: activity onPauseD/SecondActivity: activity onStopD/SecondActivity: activity onDestroy2. 使用基于Process的生命周期监控D/SecondActivity: activity onCreateD/SecondActivity: activity onStartD/SecondActivity: activity onResume//中间跳转到应用内其他界面,无LOG打印D/SecondActivity: activity onPauseD/SecondActivity: activity onStop//应用按返回键推出后,onDestroy未执行

可以看到,两种不同方式下,针对应用的生命周期范围完全不同,前者只关注当前活动的运行状态,后者则统计应用中所有活动,对其生命周期进行显示。开发者可以根据具体的业务需求来选择使用不同的生命周期感知方式。

注意:使用ProcessLifecycleOwner需要引用如下库:

implementation 'android.arch.lifecycle:extensions:1.1.1'

■ Over ■

好了,今天的LifeCycle库基本使用方法就介绍到这里,你Get到了吗?欢迎在公众号留言。

易飞澈信息科技

更多科技资讯,新技术学习

Jetpack系列:谈应用如何优雅的感知生命周期_第2张图片

你可能感兴趣的:(技术分享)