有些操作的前提是需要知道当前的APP的状态才能进行,比如说从通知栏跳到某个界面,如果要进入的界面已经在前端了,还要去把它删除再跳,这个时候用户会看到这个界面有明显的跳动,体验会很差。
很简单的几个方法,就可以判断出来应用的各个UI是否在前端,直接上代码。
//获取运行中的task列表
public static ActivityManager.RunningTaskInfo getTopTask(Context context) { ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = mActivityManager.getRunningTasks(1); if (tasks != null && !tasks.isEmpty()) { return tasks.get(0); } return null; } /** * 判断目标页面是否运行在前端 * @param topTask * @param packageName * @param activityName * @return */ public static boolean isTopActivity( ActivityManager.RunningTaskInfo topTask, String packageName, String activityName) { if (topTask != null) { ComponentName topActivity = topTask.topActivity; if (topActivity.getPackageName().equals(packageName) && topActivity.getClassName().equals(activityName)) { return true; } } return false; } /** * 判断应用当前是否运行中,包括后台运行 * @param context * @return */ public static boolean isApplicationRunning(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(Integer.MAX_VALUE); for (ActivityManager.RunningTaskInfo runningTaskInfo : taskList) { if (runningTaskInfo.topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; }