Android-jetpack系列之初探LifeCycle
1.介绍
LifeCycle是可以感知Activity和Fragment生命周期函数的组件,这样的话可以在页面开启和销毁的时候做一些事情,比如一个定时器功能在页面可见的时候计时,页面不可见的时候暂停。
2.实战
3.普通写法以及打印的日志
class LifeCycleActivity : AppCompatActivity(){
var isRun:Boolean=true
var count:Int = 0
private val TAG:String = "LifeCycleActivity"
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_lifecycle)
}
override fun onResume() {
super.onResume()
isRun = true
Thread{
run {
while (isRun){
Thread.sleep(1000)
count++
Log.e(TAG, "onResume: $count")
}
}
}.start()
}
override fun onPause() {
super.onPause()
isRun = false
Log.e(TAG, "onPause")
}
}
这种方法固然能实现,但是不优雅不符合编程的分层思想,Activity中不适合做太多的逻辑判断和耗时操作,扯远了哈!!!这就又说到设计模式了。
4.来看看LifeCycle的实现方式吧
1).创建一个TimeDown的类并实现LifecycleObserver接口
class TimeDown : LifecycleObserver {
}
2).创建两个方法并加入LifeCyle枚举类型的注解,看注解的名字就知道是和活动的生命周期是同步的。
class TimeDown : LifecycleObserver {
private val TAG: String = "LifecycleObserver"
private var isStart: Boolean = true
private var count:Int = 0
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
isStart = true
Thread {
run {
while (isStart) {
Thread.sleep(1000)
count++
Log.e(TAG, "onStart: $count")
}
}
}.start()
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause() {
isStart = false
Log.e(TAG, "onStop")
}
}
源码中如下
@SuppressWarnings("WeakerAccess")
public enum Event {
/**
* Constant for onCreate event of the {@link LifecycleOwner}.
*/
ON_CREATE,
/**
* Constant for onStart event of the {@link LifecycleOwner}.
*/
ON_START,
/**
* Constant for onResume event of the {@link LifecycleOwner}.
*/
ON_RESUME,
/**
* Constant for onPause event of the {@link LifecycleOwner}.
*/
ON_PAUSE,
/**
* Constant for onStop event of the {@link LifecycleOwner}.
*/
ON_STOP,
/**
* Constant for onDestroy event of the {@link LifecycleOwner}.
*/
ON_DESTROY,
/**
* An {@link Event Event} constant that can be used to match all events.
*/
ON_ANY
}
3).Activity中引用
class LifeCycleActivity : AppCompatActivity(){
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_lifecycle)
lifecycle.addObserver(TimeDown())
}
}
有的同学可能会问这个lifecycle哪里来的?这个其实是Activity的基类中已经实现了LifecycleOwner接口,并在Activity中提供了一个get方法获取lifecycle,所以我们获取这个然后将我们的timedown通过观察者的模式添加上,就等于和Activity的生命周期绑定上啦!!!
public class ComponentActivity extends androidx.core.app.ComponentActivity implements
LifecycleOwner,
ViewModelStoreOwner,
HasDefaultViewModelProviderFactory,
SavedStateRegistryOwner,
OnBackPressedDispatcherOwner {
.......
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
到这里LifeCycle就讲完啦!!!