在项目中,难免会遇到耗时操作,我们都将其写入子线程,但耗时操作结束后则可能需要跳转,但如果用户此前已经将app调成后台程序,此时在进行跳转,Android5.0之后会将app提升为前台应用,也就是用户在操作其他应用是,我们的app会突然蹦出来,这样的体验自然不好。在我们项目中,解决方法是:
1、耗时操作结束后,进行判定,应用是否是前台应用,如果是,可进行耗时操作
2、如果耗时操作结束后,应用已经被用户调整为后台应用,则在onRestart中进行跳转操作(在此处还需添加一个标记,跳转后标记失效,以免跳转页面关闭后,重新展现该页面,又会再次跳转),这样用户在下次再次开启app的时候,直接跳转到对应的页面。
判断是否为前台应用的方法:
/**
* 程序是否在前台运行
*
* @return
*/
public static boolean isAppOnForeground() {
// Returns a list of application processes that are running on the
// device
ActivityManager activityManager = (ActivityManager) CommUtils.getContext().getSystemService(Context.ACTIVITY_SERVICE);
String packageName = CommUtils.getContext().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;
}