项目地址:项目地址包含之前的内容
public abstract class lifecycle {}
根据文档的注释,这个类可以帮助我们创建一个拥有AndroID生命周期的对象。比如Fragment和Activity。
需要做到三点:
为了达到这三点,JetPack提供了三个类:
lifecycleOwner,实现此接口,即可作为生命周期的拥有者。lifecycleObserver,实现此接口,即可作为生命周期的观察者。lifecycle,此抽象类用来管理观察者,lifecycleRegistry是它的一个具体实现,可以处理多个观察者。ok,了解了上面的部分,就可以来实现一个简单的demo了。任何有规律的class,都可以有生命周期,看自己需求了,不止ac和Fragment
代码示例创建一个生命周期拥有者,需要实现lifecycleOwner接口这里就用一个Activity了,因为SupportActivity已经实现了lifecycleOwner
public class lifecycleActivity extends BaseActivity { public static voID start(Context context) { Intent starter = new Intent(context, lifecycleActivity.class); context.startActivity(starter); } @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_lifecycle); }}
创建一个生命周期观察者,需要实现lifecycleObserver接口public class TestlifecycleObserver implements lifecycleObserver { final String TAG = getClass().getSimplename(); @OnlifecycleEvent(lifecycle.Event.ON_CREATE) public voID onCreate() { Log.i("life", TAG + "-----onCreate"); } @OnlifecycleEvent(lifecycle.Event.ON_START) public voID onStart() { Log.i("life", TAG + "-----onStart"); } @OnlifecycleEvent(lifecycle.Event.ON_RESUME) public voID onResume() { Log.i("life", TAG + "-----onResume"); } @OnlifecycleEvent(lifecycle.Event.ON_PAUSE) public voID onPause() { Log.i("life", TAG + "-----onPause"); } @OnlifecycleEvent(lifecycle.Event.ON_Stop) public voID onStop() { Log.i("life", TAG + "-----onStop"); } @OnlifecycleEvent(lifecycle.Event.ON_DESTROY) public voID onDestroy() { Log.i("life", TAG + "-----onDestroy"); }}
TestlifecycleObserver 中创建了一些和Activity方法对应的生命周期,并且指定了对应的注解。管理者会根据注解决定回调哪个方法。
创建生命周期管理者 ,就用系统已经实现的lifecycleRegistry。SupportActivity同样已经帮我处理好了
public class SupportActivity extends Activity implements lifecycleOwner, Component { private SimpleArrayMap<Class<? extends SupportActivity.ExTradata>, SupportActivity.ExTradata> mExTradataMap = new SimpleArrayMap(); //实例化lifecycleRegistry ,可以管理多个观察者 private lifecycleRegistry mlifecycleRegistry = new lifecycleRegistry(this);... protected voID onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建一个ReportFragment对象,主要目的是分发不同的状态 ReportFragment.injectIfNeededIn(this); } @CallSuper protected voID onSaveInstanceState(Bundle outState) { //改变状态 this.mlifecycleRegistry.markState(State.CREATED); super.onSaveInstanceState(outState); }
在onCreate的时候创建了一个ReportFragment对象,通过它的生命周期,来分发不同的生命事件。
public class ReportFragment extends Fragment {...@OverrIDe public voID onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); dispatchCreate(mProcessListener); dispatch(lifecycle.Event.ON_CREATE); } @OverrIDe public voID onStart() { super.onStart(); dispatchStart(mProcessListener); dispatch(lifecycle.Event.ON_START); } @OverrIDe public voID onResume() { super.onResume(); dispatchResume(mProcessListener); dispatch(lifecycle.Event.ON_RESUME); } @OverrIDe public voID onPause() { super.onPause(); dispatch(lifecycle.Event.ON_PAUSE); } @OverrIDe public voID onStop() { super.onStop(); dispatch(lifecycle.Event.ON_Stop); } @OverrIDe public voID onDestroy() { super.onDestroy(); dispatch(lifecycle.Event.ON_DESTROY); // just want to be sure that we won't leak reference to an activity mProcessListener = null; }...}
ReportFragment 把生命周期dispatch出去,接下来就是一系列的判断过程了,然后ReflectiveGenericlifecycleObserver中,利用反射,找到对应的方法去调用。
OK,经过上面三步,其实咱们只干了一步创建观察者,其它的都是已经实现好了的。接下来,只需要给Activity添加观察者就行了
@OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //添加观察者 getlifecycle().addobserver(new TestlifecycleObserver()); setContentVIEw(R.layout.activity_lifecycle); }
然后,运行看日志
07-12 10:49:00.967 11043-11043/com.example.study I/life: lifecycleActivity-----onCreate07-12 10:49:00.987 11043-11043/com.example.study I/life: TestlifecycleObserver -----onCreate07-12 10:49:00.987 11043-11043/com.example.study I/life: lifecycleActivity-----onStart07-12 10:49:00.987 11043-11043/com.example.study I/life: TestlifecycleObserver -----onStart07-12 10:49:00.987 11043-11043/com.example.study I/life: lifecycleActivity-----onResume07-12 10:49:00.987 11043-11043/com.example.study I/life: TestlifecycleObserver -----onResume---按下返回---07-12 10:50:11.747 11043-11043/com.example.study I/life: TestlifecycleObserver -----onPause07-12 10:50:11.747 11043-11043/com.example.study I/life: lifecycleActivity-----onPause07-12 10:50:12.207 11043-11043/com.example.study I/life: TestlifecycleObserver -----onStop07-12 10:50:12.207 11043-11043/com.example.study I/life: lifecycleActivity-----onStop07-12 10:50:12.207 11043-11043/com.example.study I/life: TestlifecycleObserver -----onDestroy07-12 10:50:12.207 11043-11043/com.example.study I/life: lifecycleActivity-----onDestroy
创建的时候TestlifecycleObserver 方法在前,退出的时候TestlifecycleObserver方法 在后。方便咱们做处理。
总结以上是内存溢出为你收集整理的Android JetPack——Lifecycle全部内容,希望文章能够帮你解决Android JetPack——Lifecycle所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)