Android前后台切换监听新方案ProcessLifecycleOwner

8,952 阅读1分钟

一、旧方案 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栈等其他工作。

所以如果有小伙伴真实用过的,可以告之一下使用情况如何,感谢 😁😁😁