一、旧方案 ActivityLifecycleCallbacks
在Application中registerActivityLifecycleCallbacks,通过变量统计然后判断出是前台还是后台。
虽然在使用过程没发现什么问题,但感觉不太优雅 😂
// MyApplication——onCreate()
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
、、、
@Override
public void onActivityStarted(@NonNull Activity activity) {
started ++;
if (started == 1) {
Log.i("LifecycleCallbacks", "应用回到前台");
}
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
started--;
if (started == 0) {
Log.i("LifecycleCallbacks", "应用退到后台");
}
}
});
二、新方案 ProcessLifecycleOwner
ProcessLifecycleOwner是Google Lifecycle中的一个类,更优雅的监听前后台的切换
使用方法
// 使用前需引用一下:
implementation "android.arch.lifecycle:extensions:1.1.1"
实现LifecycleObserver,随便起个方法名,并搭配上注解@OnLifecycleEvent(Lifecycle.Event.ON_START)
监听前后台切换主要是Lifecycle.Event.ON_START和Lifecycle.Event.ON_STOP,其他的请查看文档
Lifecycle.Event
private class MyLifecycleObserver implements LifecycleObserver {
// 方法名随便取,注解才是重点
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onForeground() {
Log.i("LifecycleObserver", "应用回到前台");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onBackground() {
Log.i("LifecycleObserver", "应用退到后台");
}
}
// 可以在Application或Activity等任意地方进行监听
ProcessLifecycleOwner.get().getLifecycle().addObserver(new MyLifecycleObserver());
更简洁的用法
public class MyApp extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
// 方法名随便取,注解才是重点
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onForeground() {
Log.i("LifecycleObserver", "应用回到前台");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onBackground() {
Log.i("LifecycleObserver", "应用退到后台");
}
}
三、补充说明
看评论小伙伴说“亲测不好用”,这里补充说明一下目前我还没用在在线上项目上,因为ActivityLifecycleCallbacks除了记录前后台切换之外,还做了记录Activity栈等其他工作。
所以如果有小伙伴真实用过的,可以告之一下使用情况如何,感谢 😁😁😁