LifeCycle之ProcessLifeCycleOwner

问题:想要知道应用程序当前处在前台、后台、或从后台回到前台,想要知道应用的状态,

LifeCycle提供了ProcessLifeCycleOwner的类,方便我们知道整个应用程序的生命周期情况

ProcessLifeCycleOwner 使用方法

1.首先添加依赖

    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

ProcessLifeCycleOwner 其本质也是观察者模式,由于要观察整个应用,需要在Application中进行代码编写。

  1. 定义一个ApplicationObserver类,实现LifecycleObserver接口,用来监听应用生命周期
public class ApplicationObserver implements LifecycleObserver {

    private String TAG = "ApplicationObserver";

    /**
     * 在应用程序的整个生命周期中只会调用一次
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        Log.e(TAG, "onCreate()");
    }

    /**
     * 应用在前台出现时被调用
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        Log.e(TAG, "onStart()");
    }

    /**
     * 应用在前台出现时被调用
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        Log.e(TAG, "onResume()");
    }

    /**
     * 当应用程序退出到后台时被调用
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        Log.e(TAG, "onPause()");
    }

    /**
     * 当应用程序退出到后台时被调用
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        Log.e(TAG, "onStop()");
    }

    /**
     * 永远不会被调用,系统不会分发调用ON_DESTROY 事件
     */
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.e(TAG, "onDestroy()");
    }

}

  1. 在Application中使用ApplicationObserver
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //监听应用的生命周期情况
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
    }
}

日志
在这里插入图片描述

使用起来非常简单,不会给项目增加任何耦合度,需要注意的是:

  • ProcessLifeCycleOwner 是针对整个应用程序的监听,与Activity数量无关。
  • Lifecycle.Event.ON_CREATE只会被调用一次,Lifecycle.Event.ON_DESTROY永远不会被调用。
  • 首次被打开或应用程序从后台到前台,会依次调用Lifecycle.Event.ON_START、Lifecycle.Event.ON_RESUME
  • 从前台到后台会依次调用Lifecycle.Event.ON_PAUSE、Lifecycle.Event.ON_STOP

LifecycleOwner是接口

public interface LifecycleOwner {
    /**
     * Returns the Lifecycle of the provider.
     *
     * @return The lifecycle of the provider.
     */
    @NonNull
    Lifecycle getLifecycle();
}

LifecycleOwner 通过getLifecycle(LifecycleObserver observer)实现观察者模式的。

总结

所有具有生命周期的组件都能够使用LifeCycle。包括Activity、Service、Fragment、Applicaption。LifeCycle组件存在的主要意义就是帮我们解耦,让自定义组件也能够感受到生命周期的变化。不需要再担心内存泄漏等问题。

相关推荐

  1. android实战Lifecycle感知组件生命周期

    2024-05-11 09:30:06       38 阅读
  2. Android : LifeCycles_简单应用

    2024-05-11 09:30:06       40 阅读
  3. Spring Bean lifecycle

    2024-05-11 09:30:06       9 阅读
  4. ViewModel、Lifecycles、LiveData基本使用

    2024-05-11 09:30:06       6 阅读
  5. Jetpack架构组件_LifeCycle组件

    2024-05-11 09:30:06       12 阅读
  6. ES 7.12官网阅读-ILM(index lifecycle management)

    2024-05-11 09:30:06       15 阅读
  7. ES-7.12-官网阅读-ILM-index lifecycle actions

    2024-05-11 09:30:06       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 09:30:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 09:30:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 09:30:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 09:30:06       20 阅读

热门阅读

  1. 学习Uni-app开发小程序Day7

    2024-05-11 09:30:06       8 阅读
  2. 在linux中学会安装与基本配置redis

    2024-05-11 09:30:06       11 阅读
  3. 在Ubuntu下搭建自己的以太坊私有链

    2024-05-11 09:30:06       11 阅读
  4. 使用Azure云服务部署你的第一个应用

    2024-05-11 09:30:06       10 阅读
  5. rk3588 安卓13 暴露相机开关接口

    2024-05-11 09:30:06       10 阅读
  6. 通配符&&正则表达式(RegEXP)

    2024-05-11 09:30:06       8 阅读
  7. 正则表达式高级用法

    2024-05-11 09:30:06       11 阅读
  8. nginx_01

    nginx_01

    2024-05-11 09:30:06      10 阅读