2019年这个时间点的Android App
从前用过一个办法来实现Android应用程序的前后台切换,那个方法是调用Application类里的registerActivityLifecycleCallbacks,然后利用一个全局变量做计数,在 onActivityStarted()中将计数器加1,在onActivityStopped方法中将计数器减一。并分别在onActivityStarted与onActivityStopped方法中判断计数器的值,如果onActivityStarted中计数器的值是0则证明是从后台进入前台,如果onActivityStopped中计数器等于0则证明是从前台进入后台。
代码主要部分如下:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
if (sForegroundCount == 0) {
// 进入foreground
}
sForegroundCount++;
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
sForegroundCount--;
if (sForegroundCount == 0) {
// 进入background
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
这样确实是可以实现目标,但是说实在话,实现方式非常的别扭。
ProcessLifecycleOwner的出现一举攻克了这个难题,使监控程序前后台切换变得优雅起来。这个类是google Lifecycle 框架中的一个类。使用需要引入
implementation 'android.arch.lifecycle:extensions:1.1.1'
implementation 'android.arch.lifecycle:runtime:1.1.1'
使用起来非常简单:
首先定义一个实现了LifecyclerObserver接口的类:
public class LifecyclerChecker implements LifecycleObserver
然后在这个类中加入如下代码:
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackground() {
// 应用进入后台
Log.e("test","LifecycleChecker onAppBackground ON_STOP");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForeground() {
// 应用进入前台
Log.e("test","LifecycleChecker onAppForeground ON_START");
}
当然,上面的方法名是随便起的,重要的是注解 @OnLifecycleEvent(Lifecycle.Event.ON_STOP)与@OnLifecycleEvent(Lifecycle.Event.ON_START),第一个表示应用进入后台,第二个表示应用进入前台。
最后,在合适的地方调用下面的方法:
ProcessLifecycleOwner.get().getLifecycle().addObserver(new LifecycleChecker());
下面这个方法无论是在Application的onCreate中调用,还是在Activity的onCreate或者其他的生命周期函数中调用都可以,你可以在自己喜欢的地方调用。
只要上面这段代码调用之后,你就可以在应用进行前后台切换的时候回调相应的方法啦。