您好,登錄后才能下訂單哦!
本文為大家分享了ActivityLifecycleCallbacks如何判斷APP是否在前臺,供大家參考,具體內容如下
ActivityManager
通常情況下,我們判斷app是否在前臺都是通過 ActivityManager。
/** * Activity是否在前臺 * @param context * @return */ private boolean isOnForground(Context context){ ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> appProcessInfoList = activityManager.getRunningAppProcesses(); if(appProcessInfoList == null){ return false; } String packageName = context.getPackageName(); for(ActivityManager.RunningAppProcessInfo processInfo : appProcessInfoList){ if(processInfo.processName.equals(packageName) && processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND ){ return true; } } return false; }
但是這個并不是最好的:
ActivityLifecycleCallbacks
Application可以通過 registerActivityLifecycleCallbacks 來注冊 ActivityLifecycleCallbacks 接口,以實現對所有Activity生命周期的回調。
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } });
每一個Activity的生命周期都會回調相應的方法。意思是Application能監聽所有Activity的生命周期咯,是不是很牛x。
這個功能可以用來做某種統計,或者弄成一個Activity鏈表可以知道前后Activity什么的,雖然目前還沒遇到這種需求,當然了”判斷APP是否在前臺“這個功能算半個不過分吧。
生命周期
然后,為了達到 ”判斷APP是否在前臺“這個功能,我們需要先知道activity的生命周期。是不是很簡單?
但是很多人不知道 如果ActivityA intent跳轉到 ActivityB,這兩個的生命周期是怎么切換的。
公布答案:
ActivityA.OnPause() —> AcitivityB.OnCreate() —> AcitivityB.OnStart() —> ActivityB.OnResume() —> ActivityA.OnStop()
其實,也確實應該是這樣嘛,你要切換新界面,總得等新界面顯示出來了,才能去處理舊界面。總不能先把舊的處理掉,然后黑屏加載新界面吧。
判斷APP是否在前臺
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { count++; if(count == 1){ Log.e("ZXK","foreground"); } } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { count--; if(count == 0){ Log.e("ZXK","background"); } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } });
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。