【问题标题】:Detect application foreground event [duplicate]检测应用程序前台事件[重复]
【发布时间】:2018-04-03 06:28:01
【问题描述】:

有没有人知道一些事件监听器来检测应用程序何时从后台返回到前台?我搜索了很多,但我没有找到这样的听众。任何其他解决方案表示赞赏。谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    您可能需要更具体地了解您的用例。

    查看Activity Lifecycle.

    onResume() 和 onStart() 都会在您的 Activity 进入前台时被调用。

    编辑: onRestart()?

    【讨论】:

    • 当应用程序从后台进入前台时,我正是需要该事件。在这种情况下确实调用了 onResume() 和 onStart() ,但不仅在这种情况下。那就是问题所在。我怎样才能区分不同的情况?如何判断应用程序是从后台返回到前台还是只是重新启动了活动?
    【解决方案2】:

    我在 BaseActivity 中做了这样的事情

    在 onResume 我检查 enterCount 是否等于 0,然后添加 enterCount 在 onPause 中我延迟 enterCount 减少 300ms,当 onCreate 不延迟两个长时似乎很好,或者我们可以在 onCreate 中做一些事情来避免第一次。

    protected void onResume(){
             int  enterCount=GlobalManager.getInstance().getEnterCount();
            if(enterCount==0){
                //do some thing for first enter 
            }
            GlobalManager.getInstance().increaseEnterCount();
    }
    
    protected void onPause(){
            GlobalManager.getInstance().decreaseEnterCountDelay();
    
    }
    

    【讨论】:

    • 你的理由是什么?你能解释一下吗?
    【解决方案3】:

    我不确定您要做什么,但是如果您想区分这两个序列之间的区别:

    • onCreate()、onStart()、onResume()
    • onPause(), onResume()

    您可以在 onPause() 中设置一个标志,然后在 onResume() 中检查该标志。

    【讨论】:

      【解决方案4】:

      从 Android 19 开始,您可以像这样在 Application 类的 onCreate() 中注册应用生命周期回调:

      @Override
      public void onCreate() {
          super.onCreate();
          registerActivityLifecycleCallbacks(new AppLifecycleCallback());
      }
      

      AppLifecycleCallback 如下所示:

      class AppLifecycleCallback implements Application.ActivityLifecycleCallbacks {
          private int numStarted = 0;
      
          @Override
          public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
      
          }
      
          @Override
          public void onActivityStarted(Activity activity) {
              if (numStarted == 0) {
                 //app went to foreground
              }
              numStarted++;
          }
      
          @Override
          public void onActivityResumed(Activity activity) {
      
          }
      
          @Override
          public void onActivityPaused(Activity activity) {
      
          }
      
          @Override
          public void onActivityStopped(Activity activity) {
              numStarted--;
              if (numStarted == 0) {
                  // app went to background
              }
          }
      
          @Override
          public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
      
          }
      
          @Override
          public void onActivityDestroyed(Activity activity) {
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        • 2023-03-19
        • 2014-10-29
        相关资源
        最近更新 更多