环境
Android Studio 3.5
问题描述
APP需要在退到后台,或者从后台回到前台时执行操作。因此需要监听APP前后台切换
问题解决
通过网络查找,得到如下在Application中判断的方法,另外为优化使用,结合了广播方式,将前后台切换通过广播外发,解决Application职责过重缺陷。具体而言就是使用Android 提供的 Application.ActivityLifecycleCallbacks 接口。水平有限,不在这里分析原理,只放实现代码。
具体步骤:
- 在继承自Application的类中复写onCreate()方法,
- 在该方法中调用registerActivityLifecycleCallbacks方法注册ActivityLifecycleCallbacks
具体代码如下:
public class MyApplication extends Application {
/**
* 当前Activity个数
*/
private int activityCount = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
if (activityCount == 0) {
//从后台进入前台
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(new Intent(Consts.BROADCAST_APP_FROEGROUND));
}
activityCount++;
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activityCount--;
if (activityCount == 0) {
//进入后台
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(new Intent(Consts.BROADCAST_APP_BACKROUND));
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
}
参考其他博文,该接口可监控所有Activity状态切换,所以也在特定Activity状态变化时执行想要的操作。我这里是在一个Service里面接收该广播。