Android對App前後臺執行狀態的判斷

2021-08-14 13:08:19 字數 1588 閱讀 2771

/**

* @param context

* @return

*/public

static

boolean

(context context)

if (processinfo.processname.equals(context.getpackagename()) &&

return

true;}}

return

false;

}

/**

* @param context

* @return

*/public

static

boolean

isrunningforeground

(context context)

return

false ;

}

拋開效能問題不談,這兩種方式看上去貌似沒有問題。但是請注意我用了「貌似」這個詞呢,說明還是有問題的。

那麼有沒有一種更好的方式也能監聽到使用者使用開機鍵進入手機鎖屏狀態下呢?答案當然是有!通過activity的生命週期方法我們可以實現這樣的功能。

我們知道,如果應用處於前台,當前activity一定呼叫了onresume方法,而應用進入後台,當前activity一定呼叫了onstop方法。根據這個原理,如果我們使用乙個計數變數activitycount,初始化為0,在我們自定義的所有activity基類baseactivity對應的生命週期方法中做加減計數處理,那麼,當activitycount為1時,則表示應用處於前台執行狀態,反之,為0時表示應用處於後台執行狀態。

利用activity生命週期來判斷應用的前後臺執行狀態,很輕鬆的獲取了各種情境下應用的前後臺狀態變換。但是有個細節需要注意,activitycount的加減處理應該加在activity的哪個生命週期方法裡面。

很多朋友會不假思索的選擇在onpause方法裡面減一,在onresume方法裡面加一。這種情況下,會出現乙個短暫的間隔問題。

a onpause ——> b oncreate ——> b onstart ——> b onresume ——> a onstop
可以看出,在a onpause到 b onresume之間,根據我們對activitycount的判斷,表示在此短暫的階段應用處於後台執行狀態,而實際情況是前台執行狀態,顯然是有問題的。

所以,正確的方式應該是在onstart裡面對activitycount加一,在onstop裡面對activity減一,而這個階段的時間小到可以忽略不計。

上述這種間隔問題主要考慮到諸如訊息推送這場景下的乙個應用前後臺狀態的判斷,而在手勢密碼這種使用場景下,無需考慮,也可以在其他生命週期方法中處理,只需要在onresume方法中判斷是否需要展示解鎖解介面。

補充:應用進入後台再回到前台時,當前activity生命週期的變化過程如下,通常往往容易忽視在onrestart之後的onstart方法:

onpause ——> onstop ——> onrestart ——> onstart ——> onresume

**:

Android判斷前後臺狀態

本人在開發中就遇到了需要判斷前後台來展示廣告的需求。一開始,我是想要根據生命週期來進行判斷展示,但是使用生命周的判斷,在對於多介面activity之間跳轉時就無法準確的判斷前後狀況。於是在網上找了不少資料,但是找到的 好多,最終我整合了多方資料完成了此功能,在這書寫整理一下,同時希望能幫助到他人。下...

android間接實現前後臺判斷

android專案裡要判斷是home按鍵。可是home鍵不提供監聽。麻煩。在應用裡,按了home鍵就是被調到後台,再回到應用就是後台調到前台,那看看有沒有可以判斷應用前後臺的方法吧。如果整個專案只有乙個activity,那麼簡單了,利用生命週期函式,在onresume 方法裡可以簡單判斷後台還是前台...

APP長時間後台執行

參考 下面就是當你使用定位來保持程式後台始終執行的相應 1.因為ios 9 的特殊性,所以我們先定義乙個判斷方法以及宣告相應的屬性 2.下面我就貼出具體的 了,這些 是參考別人的,我會在下面解釋 的具體含義,同時給出優化方案,優化後的 並沒有單獨寫成demo,所以就不具體的說明了,但是我會把這裡的 ...