国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android應(yīng)用程序轉(zhuǎn)到后臺并回到前臺判斷方法

2019-12-12 04:38:15
字體:
供稿:網(wǎng)友

我們知道,當(dāng)我們按返回或Home鍵退出應(yīng)用程序的界面時,應(yīng)用程序會在后臺被掛起。這么設(shè)計的好處是,由于應(yīng)用被系統(tǒng)緩存在內(nèi)存中,那么在用戶打開啟動應(yīng)用時就可以通過調(diào)用緩存,快速啟動應(yīng)用。當(dāng)然,由于當(dāng)今內(nèi)存和處理器能力的限制,系統(tǒng)會自動關(guān)閉一些進(jìn)程。

那么我如何判斷這個應(yīng)用程序在前臺還是后臺,應(yīng)用從后臺回到前臺了?

看到一般都是runningProcess或者runningTasks來判斷應(yīng)用在前臺還是后臺

事實上,Android在SDK 14的時候提供了一個Callback。ActivityLifecycleCallbacks,你可以通過這個Callback拿到App所有Activity的生命周期回調(diào)。

public class Application extends android.app.Application {   private int activityCount;//activity的count數(shù)    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初始化的時候來注冊。

通過這些回調(diào)我們可以將這個計數(shù)放在onStart()和onStop()中去。activityCount==1,那么就是前臺,activityCount==0,那就是后臺。這樣判斷很很簡單了吧。

public abstract class BaseClass extends AppCompatActivity { 判斷當(dāng)前的應(yī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;  //聲明一個布爾變量,記錄當(dāng)前的活動背景   @Override  public void onPause(){    super.onPause();     if(isApplicationBroughtToBackground())      wasBackground= true;  }  public void onResume(){    super.onResume();     if(wasBackground){//            Log.e("aa","從后臺回到前臺");    }    wasBackground= false;  }}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 周口市| 屏南县| 甘德县| 合山市| 汪清县| 阜新| 林甸县| 楚雄市| 连平县| 五华县| 广饶县| 崇义县| 义马市| 凤冈县| 六枝特区| 黄浦区| 会同县| 余干县| 桑植县| 商河县| 延边| 陵川县| 绥芬河市| 衡阳县| 辽中县| 宁河县| 长岛县| 于都县| 大渡口区| 微山县| 河池市| 龙陵县| 远安县| 集贤县| 宣化县| 酒泉市| 黔南| 承德市| 邹城市| 尼木县| 陆川县|