? ? ? ? 項目開發(fā)過程中總會遇到判斷應(yīng)用程序是否置于后臺或者從后臺切換到前臺。往往在切換的時候應(yīng)用會通過請求接口更新頁面展示數(shù)據(jù)或者提示廣告信息等相關(guān)操作。因此對于開發(fā)者來說判斷應(yīng)用程序前后臺狀態(tài)還是比較重要的。下面記錄兩種判斷應(yīng)用前后臺狀態(tài)的方法。
????????第一種通過使用ActivityManager管理器獲取運(yùn)行中的進(jìn)程集合,通過循環(huán)進(jìn)程集合找到應(yīng)用程序進(jìn)程信息類(RunningAppProcessInfo)。通過RunningAppProcessInfo中的importance屬性數(shù)據(jù)判斷是否等于100,如果等于代表當(dāng)前進(jìn)程處于前臺狀態(tài),反之后臺狀態(tài)。代碼如下:
public static boolean isBackground(Context context) {
ActivityManager activityManager = (ActivityManager)context.getSystemService("activity");
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
Iterator var3 = appProcesses.iterator();
RunningAppProcessInfo appProcess;
do {
if (!var3.hasNext()) {
return false;
}
appProcess = (RunningAppProcessInfo)var3.next();
} while(!appProcess.processName.equals(context.getPackageName()));
if (appProcess.importance == 100) {
TTLog.i("前臺", new Object[]{appProcess.processName});
return false;
} else {
TTLog.i("后臺", new Object[]{appProcess.processName});
return true;
}
}
????????第二種方法比較復(fù)雜是通過監(jiān)聽?wèi)?yīng)用程序中Activity生命周期狀態(tài)判斷是否置于前后臺。監(jiān)聽Activity生命狀態(tài)并不是要把所有的Activity都記錄下在。而是通過Application中提供的registerActivityLifecycleCallbacks方法監(jiān)聽Activity生命周期,該方法需要傳遞ActivityLifecycleCallbacks接口實現(xiàn)類的對象。該接口中有對應(yīng)Activity生命周期的回調(diào)方法。例如onCreate->onActivityCreated;onStart-->onActivityStarted等。通過這些回調(diào)方法就可以判斷當(dāng)前是否有Activity頁面處于運(yùn)行中的狀態(tài),如果是運(yùn)行中就代表當(dāng)前應(yīng)用處于前臺狀態(tài),反之如果沒有Activity處于運(yùn)行中就代表處于后臺狀態(tài)??梢酝ㄟ^單例的形式實現(xiàn)實現(xiàn)ActivityLifecycleCallbacks。代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-520019.html
object ActivityLifecycleCallbacker : Application.ActivityLifecycleCallbacks {
//運(yùn)行的Activity個數(shù)
private var liveActivityCount = 0
//是否處于壓后臺狀態(tài)
private var mIsOnBackground = false
//壓后臺的回調(diào)
private var mOnBackgroundCallback: OnBackgroundCallback? = null
/**
* 是否處在壓后臺
*/
fun isOnBackground(): Boolean {
return mIsOnBackground
}
/**
* 壓后臺的回調(diào)處理
*/
interface OnBackgroundCallback {
//壓后臺時觸發(fā)
fun handleOnBackground(activity: Activity?)
//從后臺回到前臺時觸發(fā)
fun handleOnForeground(activity: Activity?)
}
/**
* 設(shè)置壓后臺的回調(diào)處理
* @param aCallback 回調(diào)
*/
fun setOnBackgroundCallback(aCallback: OnBackgroundCallback?) {
mOnBackgroundCallback = aCallback
}
/**
* 運(yùn)行Activity個數(shù)
*/
fun getLiveActivityCount(): Int {
return liveActivityCount
}
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
liveActivityCount++
if (mIsOnBackground) { //從壓后臺回來
mOnBackgroundCallback?.handleOnForeground(activity)
//重置后臺標(biāo)識
mIsOnBackground = false
}
}
override fun onActivityResumed(activity: Activity) {
}
override fun onActivityPaused(activity: Activity?) {}
override fun onActivityStopped(activity: Activity?) {
liveActivityCount--
if (liveActivityCount == 0) {//處于后臺
mOnBackgroundCallback?.handleOnBackground(activity)
mIsOnBackground = true
}
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {}
override fun onActivityDestroyed(activity: Activity) {
mIsOnBackground = false
}
}
需要注意的是上述代碼中需要注冊onBackgroundCallback接口實現(xiàn)類對象。通過該接口回調(diào)方法獲得放置后臺狀態(tài)mIsOnBackground。如果mIsOnBackground為true代表置于后臺,如果為false代表置于前臺。置于后臺的回調(diào)方法需要判斷l(xiāng)iveActivityCount的個數(shù)是否為0,如果為0代表沒有活躍的Activity頁面說明應(yīng)用置于后臺。通過上述方式獲取到的前后臺狀態(tài)更為準(zhǔn)確。文章來源地址http://www.zghlxwxcb.cn/news/detail-520019.html
到了這里,關(guān)于如何判斷Android應(yīng)用置于前后臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!