android 判断进程是否处于前台

来源:互联网 发布:火焰特效软件 编辑:程序博客网 时间:2024/05/31 13:17


今天,简单讲讲如何判断android 的进程是否处于前台。


1、通过RunningTaskInfo类判断(需要额外权限):

/**     *判断当前应用程序处于前台还是后台     */    public static boolean isApplicationBroughtToBackground(final Context context) {        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        List<RunningTaskInfo> tasks = am.getRunningTasks(1);        if (!tasks.isEmpty()) {            ComponentName topActivity = tasks.get(0).topActivity;            if (!topActivity.getPackageName().equals(context.getPackageName())) {                return true;            }        }        return false;    }


需要在AndroidMenitfest.xml文件中添加以下权限

<uses-permission android:name="android.permission.GET_TASKS" />  



2、通过RunningAppProcessInfo类判断(不需要额外权限):

    //当前应用是否处于前台    private boolean isForeground(Context context) {        if (context != null) {            ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);            List<ActivityManager.RunningAppProcessInfo> processes = activityManager.getRunningAppProcesses();            for (ActivityManager.RunningAppProcessInfo processInfo: processes) {                if (processInfo.processName.equals(context.getPackageName())) {                    if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {                        return true;                    }                }            }        }        return false;    }可以根据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();但上面的方法有的机型不支持,第一种方法还是比较靠谱的,但需要一个权限。具体使用还是看大家自己。版本4.0以上,可以使用ActivityLifecycleif (Build.VERSION.SDK_INT >= 14) {            lifecycle = new SimpleActivityLifecycle();            registerActivityLifecycleCallbacks(lifecycle);public class SimpleActivityLifecycle implements Application.ActivityLifecycleCallbacks {    private boolean isForeground = false;//应用是否处于前端    @Override    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {    }    @Override    public void onActivityStarted(Activity activity) {    }    @Override    public void onActivityResumed(Activity activity) {        isForeground = true;    }    @Override    public void onActivityPaused(Activity activity) {        isForeground = false;    }    @Override    public void onActivityStopped(Activity activity) {    }    @Override    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {    }    @Override    public void onActivityDestroyed(Activity activity) {    }    public boolean isForeground() {        return isForeground;    }}


android 判断进程是否处于前台就讲完了。


就这么简单。


阅读全文
0 0