Android 判断app是否在前台运行

方法一:使用ActivityLifecycleCallbacks

android 在从sdk14 开始为我们提供了一个新的api 用于检测app 中activity 的生命周期,我们可以直接使用。

public interface ActivityLifecycleCallbacks {
        void onActivityCreated(Activity activity, Bundle savedInstanceState);
        void onActivityStarted(Activity activity);
        void onActivityResumed(Activity activity);
        void onActivityPaused(Activity activity);
        void onActivityStopped(Activity activity);
        void onActivitySaveInstanceState(Activity activity, Bundle outState);
        void onActivityDestroyed(Activity activity);
    }

根据 Activity 的生命周期,知道onStart() 一般表示一个Activity 处于前台,onStop() 一般表示Activity在后台不可见。所以我们设置一个int refCount 变量, onActivityStarted 的时候refCount++, onActivityStopped的时候refCount--。当onActivityStopped之后如果refCount == 0 了。那么表示我们的app里面没有处于onStart的Activity 了,
也就相当于 app 已经处于后台了。

class ActivityLifecycleListener implements ActivityLifecycleCallbacks{

        private int refCount = 0;

        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

        }

        @Override
        public void onActivityStarted(Activity activity) {
            refCount++;
        }

        @Override
        public void onActivityResumed(Activity activity) {

        }

        @Override
        public void onActivityPaused(Activity activity) {

        }

        @Override
        public void onActivityStopped(Activity activity) {
            refCount--;
            if(refCount == 0){
                setAppGoBackGround(true);
            }
        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

        }

        @Override
        public void onActivityDestroyed(Activity activity) {

        }
    }

然后在app 里面的 Application onCreate()方法注册即可:

registerActivityLifecycleCallbacks(new ActivityLifecycleListener());
方法二:
public static boolean isBackground(Context context) {  
        ActivityManager activityManager = (ActivityManager) context  
                .getSystemService(Context.ACTIVITY_SERVICE);  
        List<RunningAppProcessInfo> appProcesses = activityManager  
                .getRunningAppProcesses();  
        for (RunningAppProcessInfo appProcess : appProcesses) {  
            if (appProcess.processName.equals(context.getPackageName())) {  
                /* 
                BACKGROUND=400 EMPTY=500 FOREGROUND=100 
                GONE=1000 PERCEPTIBLE=130 SERVICE=300 ISIBLE=200 
                 */  
                Log.i(context.getPackageName(), "此appimportace ="  
                        + appProcess.importance  
                        + ",context.getClass().getName()="  
                        + context.getClass().getName());  
                if (appProcess.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {  
                    Log.i(context.getPackageName(), "处于后台"  
                            + appProcess.processName);  
                    return true;  
                } else {  
                    Log.i(context.getPackageName(), "处于前台"  
                            + appProcess.processName);  
                    return false;  
                }  
            }  
        }  
        return false;  
    }  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近刚从旧公司离职,为面试在做准备,因为平时开发CV大法用得比较多,很多基础知识掌握得不是很牢靠以及很多工具框架只...
    黎清海阅读 2,237评论 1 19
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w阅读 723评论 0 4
  • 我想我一定是不懂自己才如此绝望,原来不是只有我在与这世界建立规则,我不必因此而自责而耿耿于怀。怀疑自己的人不容易找...
    由律阅读 146评论 0 0
  • 相比于旋律的欣赏,还是更倾向于文字。 这就养成了一个坏习惯:听歌时,往往最容易有感触的是歌词,而不是旋律。 常常会...
    Wax9537阅读 447评论 0 1
  • 有的人整天忙忙碌碌却产出不高,有的人看着沉稳悠闲但要事不误,差距在哪里?在于工作的习惯和方法,是否学会统筹重点和要...
    于鹏飞_阅读 198评论 0 0