編輯:關於Android編程
我們知道,當我們按返回或Home鍵退出應用程序的界面時,應用程序會在後台被掛起。這麼設計的好處是,由於應用被系統緩存在內存中,那麼在用戶打開啟動應用時就可以通過調用緩存,快速啟動應用。當然,由於當今內存和處理器能力的限制,系統會自動關閉一些進程。
那麼我如何判斷這個應用程序在前台還是後台,應用從後台回到前台了?
看到一般都是runningProcess或者runningTasks來判斷應用在前台還是後台
事實上,Android在SDK 14的時候提供了一個Callback。ActivityLifecycleCallbacks,你可以通過這個Callback拿到App所有Activity的生命周期回調。
public class Application extends android.app.Application { private int activityCount;//activity的count數 private boolean isForeground;//是否在前台 @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) { } }); } }
這個Callback寫在Application裡的,你可以在Application初始化的時候來注冊。
通過這些回調我們可以將這個計數放在onStart()和onStop()中去。activityCount==1,那麼就是前台,activityCount==0,那就是後台。這樣判斷很很簡單了吧。
public abstract class BaseClass extends AppCompatActivity { 判斷當前的應用程序是不是在運行 //需要申請GETTask權限 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; //聲明一個布爾變量,記錄當前的活動背景 @Override public void onPause(){ super.onPause(); if(isApplicationBroughtToBackground()) wasBackground= true; } public void onResume(){ super.onResume(); if(wasBackground){// Log.e("aa","從後台回到前台"); } wasBackground= false; }}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
前置文章: 《Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃》 《Android 4.4 Kitkat Phone工作
1,手機獲取ROOT權限(我的是小米note,直接下載MIUI開發版安裝即可)2,在應用市場下載(終端模擬器),安裝。3,賦予(終端模擬器)ROOT權限。提示:測試其是否
關於Android View 事件分發過程的文章網絡上可以搜到一把大,這裡貼一篇代碼性的文章,作者也是個牛人:Android事件分發機制完全解析,帶你從源碼的角度徹底理解
一、問題現象1、多次進出需要強制橫屏的app,比如Real FootBall2015,在退出app的時候會有概率出現退出卡頓,然後TP無法輸入的問題。2、出問題時Powe