前言
在Android开发中,有一个我们绕不开的话题那就是生命周期,我们所熟悉的大多数组件都有生命周期的,比如Activity、Fragment、Service,而这些生命周期由Android系统自己管理。但是想象一个这种场景,Activity或者Fragment里面有个后台线程如果我们不注意的话当后台线程的生命周期比Activity或者Fragment长的话就会有各种问题,比如内存泄露,甚至是崩溃的问题。常见的比如Activity发起一个网络请求,如果网络状况不是很好的话,我们在请求结果完成之前把Activity给finish了,一般来说网络请求是个后台任务,Activity给finish之后,网络请求成功,拿到数据对Activity的View进行渲染,这个时候往往就变得不可控了,这是个非常常见的场景。我们能想到的问题google肯定也会意识到,要不怎么能说google大法好,google适时推出了Lifecycle。简单介绍下,Lifecycle是用来响应另一个组件的生命周期状态的变化,例如Activity或者Fragment,区别于之前的alpha版本经过公测,google推出了正式版。
集成
google教程其实已经说得很明白了,如果你只关注生命周期那么在gradle里面加入如下两行就行了:
compile "android.arch.lifecycle:runtime:1.0.3"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0"值得注意的是com.android.support的版本必须是26.1.0以上。以为这个版本及以上的FramentActivity等常用的Activity默认实现了LifecycleOwner,这点很重要,可以大大减少集成的工作量。
第一步
对Activity等组件生命周期进行感知的组件要实现LifecycleObserver接口,直接看代码:
package com.example.administrator.lifecycledemo;
/**
* Created by lishaojie on 2017/11/17.
*/
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
import android.util.Log;
public class TestClass extends AppCompatTextView implements LifecycleObserver {
public TestClass(Context context, AttributeSet attrs) {
super(context, attrs);
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void create() {
append(System.currentTimeMillis() + "-ON_CREATE\n");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void start() {
append(System.currentTimeMillis() + "-ON_START\n");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void resume() {
append(System.currentTimeMillis() + "-ON_RESUME\n");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void pause() {
append(System.currentTimeMillis() + "-ON_PAUSE\n");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void stop() {
append(System.currentTimeMillis() + "-ON_STOP\n");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void destroy() {
Log.e("destory", System.currentTimeMillis()+"ON_DESTROY");
}
}可以看到,TestClass需要与Activity等组件的生命周期关联起来必须实现LifecycleObserver接口然后采用注解的方式,对Activity等组件的变化进行处理。
第二步
TestClass与Activity等组件关联起来呢,如下:
package com.example.administrator.lifecycledemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TestClass testClass = (TestClass) findViewById(R.id.tv_test);
//将LifecycleObserver与Activity关联起来
getLifecycle().addObserver(testClass);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}因为AppCompatActivity默认实现了LifecycleOwner,所以只要这么一行代码就可以了:
getLifecycle().addObserver(testClass);
是不是很简单。运行之后按home键,结果如图:
简单吧!具体的原理等我研究透了再与大家分享!
demo地址喜欢的给个星吧!