【问题标题】:How to get Activity that paused and goes in background?如何获得暂停并进入后台的活动?
【发布时间】:2020-01-17 05:43:09
【问题描述】:

我有一种情况,当我的应用程序进入后台(没有完全杀死!)并且最后一个活动活动是 BActivity。在这种状态下。我收到推送通知。

当点击通知时,它应该打开之前打开的最后一个活动,即 (BActivity)。

问题 如何打开最后一个特定的暂停活动?

是否有任何答案,例如设置标志或清单配置?

【问题讨论】:

    标签: android android-intent android-activity android-lifecycle


    【解决方案1】:

    如果我理解正确,您希望在收到推送通知后将您的应用程序带回前台吗?在这种情况下,请使用以下代码:

    Intent intent = new Intent(context, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    startActivity(intent);
    

    其中 MainActivity 是您在 AndroidManifest.xml 中指定的启动器 Activity

    这应该将您的应用以其先前的状态带到前台(如果有的话),否则启动 MainActivity。

    有关说明,请参阅here

    【讨论】:

      【解决方案2】:

      您可以尝试将活动生命周期回调添加到您的应用程序。并判断当前暂停或恢复活动的活动类型等。示例代码:

      public static void init(Application app) {
              app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
      
                  private int activityCount = 0;
      
                  @Override
                  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                      AppUtils.attachActivity(activity);
                  }
      
                  @Override
                  public void onActivityStarted(Activity activity) {
                      activityCount++;
                      AppUtils.attachForeActivity(activity);
                  }
      
                  @Override
                  public void onActivityResumed(Activity activity) {
                      if (!isForeGround) {
                          isForeGround = true;
                          notifyForegroundChange(true);
                      }
                  }
      
                  @Override
                  public void onActivityPaused(Activity activity) {
                      // no-op
                  }
      
                  @Override
                  public void onActivityStopped(Activity activity) {
                      AppUtils.detachForeActivity(activity);
                      activityCount--;
                      if (activityCount == 0) {
                          isForeGround = false;
                          notifyForegroundChange(false);
                          Log.i(TAG, "Activity foreground: " + System.currentTimeMillis());
                      }
                  }
      
                  @Override
                  public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                      // no-op
                  }
      
                  @Override
                  public void onActivityDestroyed(Activity activity) {
                      AppUtils.detachActivity(activity);
                  }
              });
          }
      

      这里我们使用activityCount 字段来计算当前活跃的活动计数。为 0 时,应用程序为后台,否则为前台。可以通过提供的回调方法判断活动类型。

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 2015-10-30
        • 1970-01-01
        • 2018-08-26
        相关资源
        最近更新 更多