Android 判斷app是否在前臺(tái)運(yùn)行

方法一:使用ActivityLifecycleCallbacks

android 在從sdk14 開始為我們提供了一個(gè)新的api 用于檢測(cè)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);
    }

根據(jù) Activity 的生命周期,知道onStart() 一般表示一個(gè)Activity 處于前臺(tái),onStop() 一般表示Activity在后臺(tái)不可見。所以我們?cè)O(shè)置一個(gè)int refCount 變量, onActivityStarted 的時(shí)候refCount++, onActivityStopped的時(shí)候refCount--。當(dāng)onActivityStopped之后如果refCount == 0 了。那么表示我們的app里面沒有處于onStart的Activity 了,
也就相當(dāng)于 app 已經(jīng)處于后臺(tái)了。

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()方法注冊(cè)即可:

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(), "處于后臺(tái)"  
                            + appProcess.processName);  
                    return true;  
                } else {  
                    Log.i(context.getPackageName(), "處于前臺(tái)"  
                            + appProcess.processName);  
                    return false;  
                }  
            }  
        }  
        return false;  
    }  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近剛從舊公司離職,為面試在做準(zhǔn)備,因?yàn)槠綍r(shí)開發(fā)CV大法用得比較多,很多基礎(chǔ)知識(shí)掌握得不是很牢靠以及很多工具框架只...
    黎清海閱讀 2,322評(píng)論 1 19
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 768評(píng)論 0 4
  • 我想我一定是不懂自己才如此絕望,原來不是只有我在與這世界建立規(guī)則,我不必因此而自責(zé)而耿耿于懷。懷疑自己的人不容易找...
    由律閱讀 163評(píng)論 0 0
  • 相比于旋律的欣賞,還是更傾向于文字。 這就養(yǎng)成了一個(gè)壞習(xí)慣:聽歌時(shí),往往最容易有感觸的是歌詞,而不是旋律。 常常會(huì)...
    Wax9537閱讀 499評(píng)論 0 1
  • 有的人整天忙忙碌碌卻產(chǎn)出不高,有的人看著沉穩(wěn)悠閑但要事不誤,差距在哪里?在于工作的習(xí)慣和方法,是否學(xué)會(huì)統(tǒng)籌重點(diǎn)和要...
    于鵬飛_閱讀 206評(píng)論 0 0

友情鏈接更多精彩內(nèi)容