** * 判断一个程序是否显示在前端,根据测试此方法执行效率在11毫秒,无需担心此方法的执行效率 * * @param packageName程序包名 * @param context上下文环境 * @return true--->在前端,false--->不在前端 */ public static boolean isApplicationShowing(String packageName, Context context) { boolean result = false; ActivityManager am = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> appProcesses = am.getRunningAppProcesses(); if (appProcesses != null) { for (RunningAppProcessInfo runningAppProcessInfo : appProcesses) { if (runningAppProcessInfo.processName.equals(packageName)) { int status = runningAppProcessInfo.importance; if (status == RunningAppProcessInfo.IMPORTANCE_VISIBLE || status == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { result = true; } } } } return result; }
***********************************************************************************
小结:
可以根据 importance 的不同来判断前台或后台RunningAppProcessInfo 里面的常量 IMOPORTANCE 就是上面所说的前台后台,其实 IMOPORTANCE 是表示这个 app 进程的重要性,因为系统回收时候,会根据 IMOPORTANCE 来回收进程的。具体可以去看文档。。public static final int IMPORTANCE_BACKGROUND = 400 //后台public static final int IMPORTANCE_EMPTY = 500 //空进程public static final int IMPORTANCE_FOREGROUND = 100 //在屏幕最前端、可获取到焦点 可理解为Activity生命周期的OnResume();public static final int IMPORTANCE_SERVICE = 300 //在服务中public static final int IMPORTANCE_VISIBLE = 200 //在屏幕前端、获取不到焦点 可理解为Activity生命周期的OnStart();
判断一个程序是否显示在前端
最新推荐文章于 2023-08-28 23:23:34 发布