Android JetPack——Lifecycle

Android JetPack——Lifecycle,第1张

概述项目地址:项目地址包含之前的内容publicabstractclassLifecycle{}根据文档的注释,这个类可以帮助我们创建一个拥有Android生命周期的对象。比如Fragment和Activity。需要做到三点:生命周期拥有者,如Fragment、Activity、dialog、Service等,或者自己创建一个具有一定生

项目地址:项目地址包含之前的内容

public abstract class lifecycle {}

根据文档的注释,这个类可以帮助我们创建一个拥有AndroID生命周期的对象。比如Fragment和Activity。
需要做到三点:

生命周期拥有者,如Fragment、Activity、dialog、Service等,或者自己创建一个具有一定生命周期的class。生命周期的观察者,如请求数据的接口、动画等,或者自己创建一个需要跟随生命周期处理逻辑的class。生命周期的通知者,专门负责把生命周期的拥有者的不同生命阶段通知到生命周期观察者。

为了达到这三点,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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存