Android 使用 Application.ActivityLifecycleCallbacks 来处理应用前后台切换状态的监听:
这里必要要注意的是:
1、打开一个 activity 的生命周期的变化;
2、从一个 activity 跳转向另一个 activity 的生命周期的变化;
3、一个 activity 切换后到后台时生命周期的变化;
了解以上几点就可以准确的确定,对状态判断的控制逻辑放在生命周期的那些位置。
package com.windfallsheng.base;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
* @Author: lzsheng
* @Description:
*/
public class ActivityLifecycleCallbacksSupporter implements Application.ActivityLifecycleCallbacks {
private final String TAG = "ActivityLifecycleCallbacksSupporter";
/**
* 记录在前台页面数量
*/
private int activityCount;
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
activityCount++;
if (activityCount == 1) { // 此时应用从后台切换到了前台
GlobalCache.getInstance().setAppForeground(true);
// 向外界通知状态变化
// 省略代码实现...
}
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
activityCount--;
if (activityCount == 0) {// 此时应用从前台切换到了后台
GlobalCache.getInstance().setAppForeground(false);
// 向外界通知状态变化
// 省略代码实现...
}
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
}