Android开发 -- Jetpack 之 Lifecycles 快速入门、简单使用、通俗解释

全文阅读预计 10 分钟

这可能是你看过的最清晰明了的讲解

主题 👇

场景说明:日常开发中,我们可能会在某个耗时接口、线程中做些操作,耗时的操作执行完毕后更改界面上某个 UI 的展示,但如果此时接口、线程还在工作但 Activity 已经关掉了呢?那么就会造成内存泄漏等问题,回顾内存泄漏的定义:生命周期长的对象持有生命周期短对象的引用就可能会造成内存泄漏,那么此时我们可能会在 ActivityonDestory 中停止掉这些耗时操作,如果你的程序中很多地方都需要在这种生命周期的地方做操作,越往后就越难以管理,那么 Jetpack 的 Lifecycles 就是为了便于我们更好的处理这些情况。

  • Lifecycles 包含有关 Activity、Fragment 生命周期状态的信息,并允许其他对象观察此状态
  • 可以用它来观察组件 Activity、Fragment 的生命周期状态

使用 👇

首先,确定几点

  • 如果你使用的是 AppCompatActivity 那么写法就会很简单
  • 如果你不是上面这种而是直接用的 Activity 那么稍微就多了些代码

如果你用的是 AppCompatActivity

// 第一步
// 我们先创建一个 Observer
// 对于对观察者模式还没有了解的请先移步到观察者的学习,很简单的
class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connect() {
        Log.e("test", "连接正常");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disConnect() {
        Log.e("test", "断开连接");
    }
}
// 第二步
// 如果你使用的是 AppCompatActivity 那么就会很简单
public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // 只是比常规多了一行这个
        getLifecycle().addObserver(new MyObserver());
    }
}

运行一下,你会发现当 SecondActivityonResume 执行时 MyObserverconnect 方法也会被执行,disConnect 方法亦是同理

如果你用的是 Activity

// 其实也很简单
// 首先 implements LifecycleOwner
// 然后在想要传递事件的地方通过 markState 传递事件(也就是 markState 传的是 PAUSE 那么 MyObserver 中注解 @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) 的 disConnect 方法就会执行)
public class ThirdActivity extends Activity implements LifecycleOwner {

    private LifecycleRegistry mLifecycleRegistry;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        mLifecycleRegistry = new LifecycleRegistry(this);
        // 将 MyObserver 绑定上去
        getLifecycle().addObserver(new MyObserver());
        mLifecycleRegistry.markState(Lifecycle.State.CREATED);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mLifecycleRegistry.markState(Lifecycle.State.RESUMED);
    }

    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
}

Ok,这样就写好了

当然,你也可以稍作改造,使它更加易用,一起来看看吧~

// 只是给 MyObserver 增加了一个接口
class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connect() {
        mListener.onRefresh("连接正常");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disConnect() {
        mListener.onRefresh("断开连接");
    }

    private OnRefreshListener mListener;
    interface OnRefreshListener{
        void onRefresh(String option);
    }
    void setOnRefreshListener(OnRefreshListener listener){
        this.mListener = listener;
    }
}

// 只是给 Activity or AppCompatActivity 的 onCreate 绑定观察者的地方做了小修改
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    mLifecycleRegistry = new LifecycleRegistry(this);

    MyObserver observer = new MyObserver();
    observer.setOnRefreshListener(new MyObserver.OnRefreshListener() {
        @Override
        public void onRefresh(String option) {
            if(option.equals("连接正常")){
                // do something
            } else if(option.equals("断开连接")){
                // do something
            }
        }
    });
    getLifecycle().addObserver(observer);
    mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}

很简单的使用方式就完成了,你可以在 do something 的区域中做任何事

文末 👇

同时

我在这里也向你推荐关于 Android JetpackLiveData、ViewModel 学习,它们将便于你对于项目的维护,让你减少更多的时间用在诸如内存泄漏、配置更改(屏幕旋转后的数据处理问题)等常见问题上。

而且,我也推荐你对于 MVVM 框架的学习,有了它,会大幅提高你的日常开发效率。

想尝试一下 LiveData请进入此链接学习我对于 LiveData 的快速及通俗讲解。 全文阅读预计 15 分钟。

想尝试一下 ViewModel请进入此链接学习我对于 ViewModel 的快速及通俗讲解。 全文阅读预计 10 分钟。

想尝试一下 MVVM 框架请进入此链接学习我对于 MVVM框架 的快速及通俗讲解。 全文阅读预计 10 分钟。

码字不易,还请动动小手左侧栏中点赞 👍,3Q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值