Android app生命周期全局监听(判断app是否处于后台)

1 篇文章 0 订阅
1 篇文章 0 订阅

### 一、在Application中注册ActivityLifecycleCallbacks:

##### registerActivityLifecycleCallbacks(myActivityLifecycle);

```
public class MyApplication extends Application {

    private static MyActivityLifecycle myActivityLifecycle;

    @Override
    public void onCreate() {
        super.onCreate();
        myActivityLifecycle = new MyActivityLifecycle();
        registerActivityLifecycleCallbacks(myActivityLifecycle);
    }

    /**
     *
     * @return  true  处于后台   false  前台
     */
    public static boolean isAppBackground() {
        if (myActivityLifecycle.getStartCount() == 0) {
            return true;
        }
        return false;
    }
}
```

### 二、MyActivityLifecycle实现Application.ActivityLifecycleCallbacks

```
public class MyActivityLifecycle implements Application.ActivityLifecycleCallbacks {
    private int startCount;

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        Log.e("==============","======>onActivityCreated");
    }

    @Override
    public void onActivityStarted(Activity activity) {
        Log.e("==============","======>onActivityStarted");
        startCount++;
    }

    @Override
    public void onActivityResumed(Activity activity) {
        Log.e("==============","======>onActivityResumed");
    }

    @Override
    public void onActivityPaused(Activity activity) {
        Log.e("==============","======>onActivityPaused");
    }

    @Override
    public void onActivityStopped(Activity activity) {
        Log.e("==============","======>onActivityStopped");
        startCount--;
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        Log.e("==============","======>onActivityDestroyed");
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        Log.e("==============","======>onActivitySaveInstanceState");
    }

    public int getStartCount(){
        return startCount;
    }
}
```

===============================分割线======================================

上面是以前的老方法(也可以说是核心原理),现在在AndroidX中有新的(google帮我们写好了的)API

AppBackgroundObserver 实现了 LifecycleObserver 接口,通过注解监听生命周期。
```
class AppBackgroundObserver : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onAppBackground() {
        Log.e("AppBackgroundObserver", "onAppBackground")
        AppBackgroundUtil.isBackground = true
        AppBackgroundUtil.dispatchBackgroundStatus(true)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onAppForeground() {
        Log.e("AppBackgroundObserver", "onAppForeground")
        AppBackgroundUtil.isBackground = false
        AppBackgroundUtil.dispatchBackgroundStatus(false)
    }

}
```

AppBackgroundUtil 工具类
```
object AppBackgroundUtil {

    internal var isBackground: Boolean = true

    private val observerList = mutableListOf<Observer>()

    fun isAppBackground(): Boolean {
        return isBackground
    }

    fun observe(observer: Observer) {
        observerList.add(observer)
    }

    fun stopObserve(observer: Observer) {
        observerList.remove(observer)
    }

    fun clearObserver(observer: Observer) {
        observerList.clear()
    }

    internal fun dispatchBackgroundStatus(isAppBackground: Boolean) {
        observerList.forEach {
            it.onChange(isAppBackground)
        }
    }


    interface Observer {
        fun onChange(isAppBackground: Boolean)
    }

}
```

在Application的onCreate()方法中注册:

```
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppBackgroundObserver());
```

上面是通过变量静态判断,我们还可以通过注册监听来动态观测。

```
AppBackgroundUtil.observe(object : AppBackgroundUtil.Observer {
            override fun onChange(isAppBackground: Boolean) {
                if (isAppBackground) {
                    // 后台
                } else {
                    // 前台
                }
            }
        })
```

ps:最后有兴趣的可以看看实现原理,其实核心还是最开始说的方式。

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uni-app生命周期函数包括应用生命周期函数和页面生命周期函数。 应用生命周期函数包括: - onLaunch:当uni-app初始化完成时触发,全局只触发一次。 - onShow:当uni-app启动,或从后台进入前台显示时触发。 - onHide:当uni-app从前台进入后台时触发。 - onError:当uni-app报错时触发。 页面生命周期函数包括: - onLoad:监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参)。 - onShow:监听页面显示。页面每次出现在屏幕上都会触发,包括从下级页面返回露出当前页面。 - onReady:监听页面初次渲染完成。 - onHide:监听页面隐藏。 - onUnload:监听页面卸载。 这些生命周期函数在不同的阶段会触发,可以在对应的函数中编写相应的逻辑代码。\[1\] \[2\] #### 引用[.reference_title] - *1* [uni-app —— uni-app生命周期](https://blog.csdn.net/Bonsoir777/article/details/127895952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [uni-app 生命周期](https://blog.csdn.net/YWW_ABC/article/details/121720505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值