今天需要实现一个需求,就是当App对用户不可见时,停止App的某些功能。那么该如何监听App是否处于前台呢?哈哈哈!非常简单,只需要用接口 Application.ActivityLifecycleCallbacks 就能实现该功能。
只需要两步,就能实现前后台监听:
一、实现接口 ActivityLifecycleCallbacks
基本思路:自定义一个类并实现ActivityLifecycleCallbacks
接口,其中重点关注接口的onActivityResumed
和onActivityStopped
方法。
自己设置一个标记位foregroundActivityCount
,当调用onActivityResumed
方法时,foregroundActivityCount加1,当调用onActivityStopped
方法时,foregroundActivityCount减1。那么当foregroundActivityCount大于0时,App肯定就处于前台,当其值等于0时,App就处于后台。
代码如下:
public class AppLifecycleManager implements Application.ActivityLifecycleCallbacks {
private int foregroundActivityCount = 0;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivityResumed(Activity activity) {
foregroundActivityCount++;
doSomething();
}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {
foregroundActivityCount--;
doSomething();
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
//当foregroundActivityCount<=0时可以断定app处于非前台状态
//对应前后台状态进行相应的操作
private void doSomething(){
if(foregroundActivityCount > 0){
//App处于前台时的操作
}else {
//App处于后台时的操作
}
}
}
二、使用该实现
很简单,只要在App的Application
> onCreate
方法中调用方法 registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback)
注册Activity的生命周期回调就行了。
如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
...
//
registerActivityLifecycleCallbacks(new AppLifecycleManager());
}
... ...
}
是不是特简单。 参考 How can I tell if Android app is running in the foreground?