原理:Application可以监听到应用中所有Activity的生命周期
在Application实现一下操作:
Activity的生命周期监听
private void registerActivityLifecycle() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Logger.debug("onActivityCreated " + activity.getClass().getSimpleName());
}
@Override
public void onActivityStarted(Activity activity) {
Logger.debug("onActivityStarted " + activity.getClass().getSimpleName());
}
@Override
public void onActivityResumed(Activity activity) {
Logger.debug("onActivityResumed " + activity.getClass().getSimpleName());
if (activity instanceof CarListActivity) {
Logger.debug("CarListActivity");
setCarlistActivityForeground(true);
} else {
setCarlistActivityForeground(false);
}
Logger.debug("Activity Name ========== \n" + activity.getClass().getSimpleName());
saveActivityStatus(activity.getClass().getSimpleName(), true);
}
@Override
public void onActivityPaused(Activity activity) {
Logger.debug("onActivityPaused " + activity.getClass().getSimpleName());
}
@Override
public void onActivityStopped(Activity activity) {
Logger.debug("onActivityStopped " + activity.getClass().getSimpleName());
if (activity instanceof CarListActivity) {
Logger.debug("CarListActivity");
setCarlistActivityForeground(false);
}
Logger.debug("Activity Name ========== \n" + activity.getClass().getSimpleName());
saveActivityStatus(activity.getClass().getSimpleName(), false);
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Logger.debug("onActivitySaveInstanceState " + activity.getClass().getSimpleName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Logger.debug("onActivityDestroyed " + activity.getClass().getSimpleName());
Logger.debug("isForeground= " + isForeground());
}
});
}
判断应用或者Activity是否运行在前台
//CarlistActivity是否正在前台运行
private boolean isCarlistActivityForeground = false;
private Map<String, Boolean> activityStatusMap;
//将activity是否运行在前台的状态,进行保存
private void saveActivityStatus(String activityName, boolean foreground) {
if (TextUtils.isEmpty(activityName))
return;
if (activityStatusMap == null)
activityStatusMap = new LinkedHashMap<>();
activityStatusMap.put(activityName, foreground);
}
/**
* 应用是否在前台运行
*
* @return
*/
public boolean isForeground() {
if (activityStatusMap == null)
return false;
if (activityStatusMap.keySet() == null)
return false;
Iterator<String> iterator = activityStatusMap.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
if (activityStatusMap.get(key)) {
return true;
}
}
return false;
}
public boolean isCarlistActivityForeground() {
return isCarlistActivityForeground;
}
private void setCarlistActivityForeground(boolean foreground) {
isCarlistActivityForeground = foreground;
}