Android應(yīng)用程序轉(zhuǎn)到后臺(tái)并回到前臺(tái)判斷方法
我們知道,當(dāng)我們按返回或Home鍵退出應(yīng)用程序的界面時(shí),應(yīng)用程序會(huì)在后臺(tái)被掛起。這么設(shè)計(jì)的好處是,由于應(yīng)用被系統(tǒng)緩存在內(nèi)存中,那么在用戶打開(kāi)啟動(dòng)應(yīng)用時(shí)就可以通過(guò)調(diào)用緩存,快速啟動(dòng)應(yīng)用。當(dāng)然,由于當(dāng)今內(nèi)存和處理器能力的限制,系統(tǒng)會(huì)自動(dòng)關(guān)閉一些進(jìn)程。
那么我如何判斷這個(gè)應(yīng)用程序在前臺(tái)還是后臺(tái),應(yīng)用從后臺(tái)回到前臺(tái)了?
看到一般都是runningProcess或者runningTasks來(lái)判斷應(yīng)用在前臺(tái)還是后臺(tái)
事實(shí)上,Android在SDK 14的時(shí)候提供了一個(gè)Callback。ActivityLifecycleCallbacks,你可以通過(guò)這個(gè)Callback拿到App所有Activity的生命周期回調(diào)。
public class Application extends android.app.Application { private int activityCount;//activity的count數(shù) private boolean isForeground;//是否在前臺(tái) @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { activityCount++; } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { activityCount--; if(0==activityCount){ isForeground=false; } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }); } }
這個(gè)Callback寫在Application里的,你可以在Application初始化的時(shí)候來(lái)注冊(cè)。
通過(guò)這些回調(diào)我們可以將這個(gè)計(jì)數(shù)放在onStart()和onStop()中去。activityCount==1,那么就是前臺(tái),activityCount==0,那就是后臺(tái)。這樣判斷很很簡(jiǎn)單了吧。
public abstract class BaseClass extends AppCompatActivity { 判斷當(dāng)前的應(yīng)用程序是不是在運(yùn)行 //需要申請(qǐng)GETTask權(quán)限 private boolean isApplicationBroughtToBackground() { ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (!topActivity.getPackageName().equals(getPackageName())) { return true; } } return false; } public boolean wasBackground= false; //聲明一個(gè)布爾變量,記錄當(dāng)前的活動(dòng)背景 @Override public void onPause(){ super.onPause(); if(isApplicationBroughtToBackground()) wasBackground= true; } public void onResume(){ super.onResume(); if(wasBackground){// Log.e("aa","從后臺(tái)回到前臺(tái)"); } wasBackground= false; }}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android判斷當(dāng)前應(yīng)用程序處于前臺(tái)還是后臺(tái)的兩種方法
- android編程判斷應(yīng)用是否具有某個(gè)權(quán)限的方法
- android判斷手機(jī)是否安裝地圖應(yīng)用實(shí)現(xiàn)跳轉(zhuǎn)到該地圖應(yīng)用
- Android編程判斷應(yīng)用程序是否已安裝的方法
- Android開(kāi)發(fā)判斷一個(gè)app應(yīng)用是否在運(yùn)行的方法詳解
- Android開(kāi)發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺(tái)切換效果
- Android應(yīng)用程序保持后臺(tái)喚醒(使用WakeLock實(shí)現(xiàn))
- Android 監(jiān)聽(tīng)?wèi)?yīng)用前/后臺(tái)切換實(shí)例代碼
- Android中應(yīng)用前后臺(tái)切換監(jiān)聽(tīng)的實(shí)現(xiàn)詳解
- Android編程判斷當(dāng)前應(yīng)用是否在后臺(tái)運(yùn)行的方法示例
相關(guān)文章
Android4.X讀取SIM卡短信和聯(lián)系人相關(guān)類實(shí)例分析
這篇文章主要介紹了Android 4.X讀取SIM卡短信和聯(lián)系人相關(guān)類,以實(shí)例形式分析了Android 4.X讀取SIM卡短信和聯(lián)系人的兩個(gè)相關(guān)類的功能、用法與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10獲取Android手機(jī)中所有短信的實(shí)現(xiàn)代碼
這篇文章主要介紹了獲取Android手機(jī)中所有短信的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-08-08SDL2和OpenGL使用踩坑筆記經(jīng)驗(yàn)分享
今天小編就為大家分享一篇關(guān)于SDL2和OpenGL使用踩坑筆記經(jīng)驗(yàn)分享,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12android實(shí)現(xiàn)QQ微信側(cè)滑刪除效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)QQ微信側(cè)滑刪除效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android 使用selector改變按鈕狀態(tài)實(shí)例詳解
這篇文章主要介紹了Android 使用selector改變按鈕狀態(tài)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01Android 實(shí)現(xiàn)手機(jī)撥打電話的功能
本篇文章主要介紹 Android 開(kāi)發(fā)手機(jī)撥打電話的功能,這里提供示例代碼,有興趣的小伙伴可以參考下2016-08-08Android使用TabLayou+fragment+viewpager實(shí)現(xiàn)滑動(dòng)切換頁(yè)面效果
這篇文章主要介紹了Android使用TabLayou+fragment+viewpager實(shí)現(xiàn)滑動(dòng)切換頁(yè)面效果,需要的朋友可以參考下2017-05-05