最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ActivityLifecycleCallbacks如何判斷APP是否在前臺(tái)

 更新時(shí)間:2018年07月20日 17:01:27   作者:xiaozhang1993  
這篇文章主要為大家詳細(xì)介紹了ActivityLifecycleCallbacks判斷APP是否在前臺(tái)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了ActivityLifecycleCallbacks如何判斷APP是否在前臺(tái),供大家參考,具體內(nèi)容如下

ActivityManager

通常情況下,我們判斷app是否在前臺(tái)都是通過 ActivityManager。

/**
   * Activity是否在前臺(tái)
   * @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;
  }

但是這個(gè)并不是最好的:

  • 性能差,相當(dāng)于遍歷所有的進(jìn)程來找前臺(tái)的且包名符合的。
  • 在有些手機(jī)上 不適用。

ActivityLifecycleCallbacks

Application可以通過 registerActivityLifecycleCallbacks 來注冊(cè) ActivityLifecycleCallbacks 接口,以實(shí)現(xiàn)對(duì)所有Activity生命周期的回調(diào)。

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) {

      }
    });

每一個(gè)Activity的生命周期都會(huì)回調(diào)相應(yīng)的方法。意思是Application能監(jiān)聽所有Activity的生命周期咯,是不是很牛x。
這個(gè)功能可以用來做某種統(tǒng)計(jì),或者弄成一個(gè)Activity鏈表可以知道前后Activity什么的,雖然目前還沒遇到這種需求,當(dāng)然了”判斷APP是否在前臺(tái)“這個(gè)功能算半個(gè)不過分吧。

生命周期

然后,為了達(dá)到 ”判斷APP是否在前臺(tái)“這個(gè)功能,我們需要先知道activity的生命周期。是不是很簡(jiǎn)單?
但是很多人不知道 如果ActivityA intent跳轉(zhuǎn)到 ActivityB,這兩個(gè)的生命周期是怎么切換的。
公布答案:
ActivityA.OnPause() —> AcitivityB.OnCreate() —> AcitivityB.OnStart() —> ActivityB.OnResume() —> ActivityA.OnStop()
其實(shí),也確實(shí)應(yīng)該是這樣嘛,你要切換新界面,總得等新界面顯示出來了,才能去處理舊界面??偛荒芟劝雅f的處理掉,然后黑屏加載新界面吧。

判斷APP是否在前臺(tái)

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) {

      }
    });
  1. 新建個(gè)int變量 count
  2. 然后在Application.onCreate()中注冊(cè)回調(diào)
  3. onActivityStarted()中 count+1,如果count為1,則進(jìn)入前臺(tái);onActivityStopped()中 count-1,如果count為0,則進(jìn)入后臺(tái)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分析Android Choreographer源碼

    分析Android Choreographer源碼

    Choreographer的作用主要是配合Vsync,給上層App的渲染提供一個(gè)穩(wěn)定的Message處理的時(shí)機(jī),也就是Vsync到來的時(shí)候,系統(tǒng)通過對(duì)Vsync信號(hào)周期的調(diào)整,來控制每一幀繪制操作的時(shí)機(jī)
    2021-06-06
  • 淺析Android加載字體包及封裝的方法

    淺析Android加載字體包及封裝的方法

    這篇文章主要介紹了Android加載字體包及封裝的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android編程之方向傳感器用法示例

    Android編程之方向傳感器用法示例

    這篇文章主要介紹了Android編程之方向傳感器用法,結(jié)合實(shí)例形式分析了Android方向傳感器的定義、監(jiān)聽及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Android Mms之:短信發(fā)送流程(圖文詳解)

    Android Mms之:短信發(fā)送流程(圖文詳解)

    本篇文章是對(duì)Android中的短信發(fā)送流程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android 中CheckBox多項(xiàng)選擇當(dāng)前的position信息提交的示例代碼

    Android 中CheckBox多項(xiàng)選擇當(dāng)前的position信息提交的示例代碼

    這篇文章主要介紹了Android 中CheckBox多項(xiàng)選擇當(dāng)前的position信息提交的示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-07-07
  • JetpackCompose Navigation導(dǎo)航實(shí)現(xiàn)流程

    JetpackCompose Navigation導(dǎo)航實(shí)現(xiàn)流程

    Navigation是Jetpack用于Android導(dǎo)航的組件,作用是處理頁面跳轉(zhuǎn),以及頁面跳轉(zhuǎn)過程中的交互。使用Navigation,你就需要為每個(gè)頁面設(shè)定一條唯一路徑,它是一個(gè)String常量,形式是DeepLink的樣子,從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)頁面,它通過輸入目的地的路徑進(jìn)行轉(zhuǎn)跳
    2023-01-01
  • Android Material加載進(jìn)度條制作代碼

    Android Material加載進(jìn)度條制作代碼

    這篇文章主要為大家詳細(xì)介紹了AndroidMaterial加載進(jìn)度條的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android截取視頻幀并轉(zhuǎn)化為Bitmap示例

    Android截取視頻幀并轉(zhuǎn)化為Bitmap示例

    利用MediaMetadataRetriever按照時(shí)間截取視頻并轉(zhuǎn)換為Bitmap存放于SDCard,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈
    2013-06-06
  • RxJava入門指南及其在Android開發(fā)中的使用示例

    RxJava入門指南及其在Android開發(fā)中的使用示例

    RxJava是JVM的一個(gè)擴(kuò)展庫,它能夠幫助Java更加方便地實(shí)現(xiàn)基于事件的編程,這對(duì)安卓來說十分有用,接下來就一起來看一下RxJava入門指南及其在Android開發(fā)中的使用示例:
    2016-06-06
  • Android的ListView多選刪除操作實(shí)現(xiàn)代碼

    Android的ListView多選刪除操作實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android的ListView多選刪除操作實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評(píng)論

望奎县| 永登县| 石嘴山市| 巴林左旗| 周宁县| 屯昌县| 游戏| 博客| 封开县| 仁寿县| 邓州市| 卢湾区| 唐海县| 老河口市| 安化县| 宣化县| 三穗县| 廊坊市| 晋江市| 呼图壁县| 宜阳县| 武胜县| 林口县| 自治县| 固原市| 晋州市| 都江堰市| 阿克苏市| 安国市| 图们市| 建始县| 普定县| 古蔺县| 景泰县| 左贡县| 永年县| 阿图什市| 类乌齐县| 长子县| 彭阳县| 巴林右旗|