ProcessLifecycleOwner判断Android应用程序前后台切换

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或者其他的生命周期函数中调用都可以,你可以在自己喜欢的地方调用。

只要上面这段代码调用之后,你就可以在应用进行前后台切换的时候回调相应的方法啦。

猜你喜欢

转载自blog.csdn.net/awy1988/article/details/99431616