场景描述:
1. APP全局有网络监听,当网络状态发生变化的时候,会跳转到ConnectActivity页面。
2. 启动APP,切换到后台,切换网络,APP自动切换到前台。
APP从前台自动切换到后台,这是 android 4.4 后修改的新特性。
解决方案:
1. 当需要跳转activity的时候,判断下当前APP是否在前台,如果在前台,则直接跳转;如果在后台,就记录下状态,当APP切换到前台的时候再进行跳转。
2. 当需要跳转activity的时候,intent增加参数
intent.putExtra("isAppOnForeground", PackageUtil.isAppOnForeground(this))
在ConnectActivity的onCreate中判断此参数是否是后台跳转,如果是则执行
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!getIntent().getBooleanExtra("isAppOnForeground", true)) {
moveTaskToBack(isTaskRoot());
}
setContentView(R.layout.activity_connect);
init();
}
这样的话,即可实现app自动从前台再切换到后台;缺点是会出现闪屏的情况;
判断应用是否在前台的方法:
/**
* 判断应用是否在前台
*/
public static boolean isAppOnForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context.getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = context.getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}