博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Jetpack架构组件之LifeCycle使用篇
阅读量:4150 次
发布时间:2019-05-25

本文共 3511 字,大约阅读时间需要 11 分钟。

一、LifeCycle的简单介绍

        LifeCycle是Jetpack中的一个组件,它的功能就是能感知生命周期的变化。这么说可能很抽象,就简单理解为LifeCycle就是一个类:LifeCycle.java,我们可以借助这个类的功能来让我们在Android中写的代码,除了Activity或Fragment这两个类本身有生命周期,其他类都能感知这两个类的生命周期变化,而且使用起来特别方便,底层都由Google封装好了。当然你会说,我们自己也可以实现这个功能呀,用接口回调或者一些第三方消息通知框架(如Eventbus等等),接下来就通过普通的方式和Google的Jetpack LifeCycle来实现对比一下。

二、接口回调的方式实现

 让普通的Test1.java类感知activity、fragment的生命周期的变化:

先定义一个接口:

public interface LifeListener {    void onCreate();    void onStart();    void onResume();    void onPause();    void onStop();    void onDestroy();}

写一个普通类Test1.java,实现这个接口:

public class Test1 implements LifeListener{    @Override    public void onCreate() {        Log.i("TAG", "Test1类接收到了activity的onCreate()生命周期");    }    @Override    public void onStart() {        Log.i("TAG", "Test1类接收到了activity的onStart()生命周期");    }    @Override    public void onResume() {        Log.i("TAG", "Test1类接收到了activity的onResume()生命周期");    }    @Override    public void onPause() {        Log.i("TAG", "Test1类接收到了activity的onPause()生命周期");    }    @Override    public void onStop() {        Log.i("TAG", "Test1类接收到了activity的onStop()生命周期");    }    @Override    public void onDestroy() {        Log.i("TAG", "Test1类接收到了activity的onDestroy()生命周期");    }}

然后在TestActivity.java类中的各个生命周期方法中回调:

public class TestActivity extends AppCompatActivity {    private LifeListener mListener;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListener = new Test1();        mListener.onCreate();    }    @Override    protected void onStart() {        super.onStart();        mListener.onStart();    }    @Override    protected void onResume() {        super.onResume();        mListener.onResume();    }    @Override    protected void onPause() {        super.onPause();        mListener.onPause();    }    @Override    protected void onStop() {        super.onStop();        mListener.onStop();    }    @Override    protected void onDestroy() {        super.onDestroy();        mListener.onDestroy();    }}

打开页面,然后退出页面,结果打印:日志输出

这种方式的优点就是原理简单,自己知道如何实现的,缺点就是代码臃肿,复杂。

三、Jetpack实现

 是一个类,它持有关于组件(如 Activity 或 Fragment)生命周期状态的信息,并且允许其他对象观察此状态。

普通的一个自己的类:Test.java

public class Test implements LifecycleObserver {    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)    public void onCreate() {        Log.i("TAG", "Test类接收到了activity的onCreate()生命周期");    }    @OnLifecycleEvent(Lifecycle.Event.ON_START)    public void onStart() {        Log.i("TAG", "Test类接收到了activity的onStart()生命周期");    }    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)    public void onResume() {        Log.i("TAG", "Test类接收到了activity的onResume()生命周期");    }    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)    public void onPause() {        Log.i("TAG", "Test类接收到了activity的onPause()生命周期");    }    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)    public void onStop() {        Log.i("TAG", "Test类接收到了activity的onStop()生命周期");    }    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)    public void onDestroy() {        Log.i("TAG", "Test类接收到了activity的onDestroy()生命周期");    }}

TestActivity.java类,一行代码搞定:

public class TestActivity extends AppCompatActivity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                //注册生命周期的监听对象        getLifecycle().addObserver(new Test());    }}

页面打开,返回退出,结果日志输出:

优点:一行代码搞定对activity的生命周期的注册,并使用注解的方式来监听生命周期的变化。下一篇分析LifeCycle的原理。

 

转载地址:http://brxti.baihongyu.com/

你可能感兴趣的文章
使用Java 导入/导出 Excel ----Jakarta POI
查看>>
本地tomcat 服务器内存不足
查看>>
IntelliJ IDAE 2018.2 汉化
查看>>
基于S5PV210的uboot移植中遇到的若干问题记录(一)DM9000网卡移植
查看>>
Openwrt源码下载与编译
查看>>
我和ip_conntrack不得不说的一些事
查看>>
Linux 查看端口使用情况
查看>>
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
配置文件的重要性------轻化操作
查看>>
又是缓存惹的祸!!!
查看>>
为什么要实现程序指令和程序数据的分离?
查看>>
我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
查看>>
一起来看看protobuf中容易引起bug的一个细节
查看>>
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>
makefile中“-“符号的使用
查看>>