Android Jetpack -- Lifecycles篇

弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述Android Jetpack -- Lifecycles篇相关的知识,希望能为你提供帮助。
Lifecycles其实从名字看肯定是与生命周期相关,那它与生命周期又有什么联系?
先参考一下官方文档:
Lifecycles是一个生命周期感知组件,当Activity或者Fragment的生命周期发生改变的时会,Lifecycles也会做出相应的生命周期状态的改变,它保存关于组件生命周期状态的信息(比如活动或片段),并允许其他对象观察这种状态。
可以看出Lifecycles是一个组件,具有感知生命周期的功能,既然是个组件,那就说明可以嵌入到其他地方,比如VewModel便是其中之一。
 
当我们需要处理与生命周期相关的组件的时候,在没有Lifecycles提供的时候,需要设置各种回调,如下所示:

1 package com.example.lifecycle; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.util.Log; 7 8 public class MainActivity extends AppCompatActivity { 9 10String TAG = "myTag"; 11 12@Override 13protected void onCreate(Bundle savedInstanceState) { 14super.onCreate(savedInstanceState); 15setContentView(R.layout.activity_main); 16Log.d(TAG, "onCreate: "); 17} 18 19@Override 20protected void onStart() { 21super.onStart(); 22Log.d(TAG, "onStart: "); 23} 24 25@Override 26protected void onResume() { 27super.onResume(); 28Log.d(TAG, "onResume: "); 29} 30 31@Override 32protected void onPause() { 33super.onPause(); 34Log.d(TAG, "onPause: "); 35} 36 37@Override 38protected void onStop() { 39super.onStop(); 40Log.d(TAG, "onStop: "); 41} 42 43@Override 44protected void onRestart() { 45super.onRestart(); 46Log.d(TAG, "onRestart: "); 47} 48 49@Override 50protected void onDestroy() { 51super.onDestroy(); 52Log.d(TAG, "onDestroy: "); 53} 54 }

【Android Jetpack -- Lifecycles篇】当组件数目过多的时候,便会需要在生命周期回调中管理多个组件从而徒增代码量,使得项目难以维护,而且在生命周期中执行过多的耗时操作极易引起内存泄漏,而这些都可以通过Lifecycles来解决。
 
 
使用示例以Chronometer为例子来示范生命周期监听
1 public class MyChronometer extends Chronometer implements LifecycleObserver { 2private long time; 3public MyChronometer(Context context) { 4super(context); 5} 6 7public MyChronometer(Context context, AttributeSet attrs) { 8super(context, attrs); 9} 10 11public MyChronometer(Context context, AttributeSet attrs, int defStyleAttr) { 12super(context, attrs, defStyleAttr); 13} 14 15//以注解的形式完成监听 16@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) 17private void stopMeter(){ 18time = SystemClock.elapsedRealtime() - getBase(); 19stop(); 20} 21 22@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 23private void resumeMeter(){ 24setBase(SystemClock.elapsedRealtime() - time); 25start(); 26} 27 }

然后Activity如下:只需要添加观察者即可
1 public class LifecyclesActivity extends AppCompatActivity { 2 3MyChronometer chronometer; 4 5@Override 6protected void onCreate(Bundle savedInstanceState) { 7super.onCreate(savedInstanceState); 8setContentView(R.layout.activity_lifecycles); 9 10chronometer = findViewById(R.id.meter); 11getLifecycle().addObserver(chronometer); 12} 13 14 }

Activity与Chronometer之间解耦了,Chrononmeter自我实现了良好的封装,也方便了移植。
这也就是使用Lifecycles带来的好处。

    推荐阅读