【问题标题】:After Home button press re-launching app shows initial activity not current按下主页按钮后重新启动应用程序显示初始活动不是当前的
【发布时间】:2011-08-01 20:02:09
【问题描述】:

我有一个应用程序,它有一个初始活动(A - 也是启动器中指定的那个),它允许用户从中启动另一个活动 (B)。我正在保存 Activity B 的状态(onSaveInstanceState() 并在 onCreate() 中恢复它)。

在某些手机(目前为 N1 和 Motrola Milestone,但不是 Galaxy S)上,如果用户在启动 B 后按下主页按钮(即应用程序进入后台),然后立即重新启动应用程序,则会显示活动A 再次(不是 B)。但是,如果他们从“最近”应用程序(长按主页按钮)启动它,他们将被带到活动 B。

根据我对 Android 文档的了解,除非任务已被终止(这里似乎不是这种情况,因为除了从应用程序屏幕重新启动活动之外没有其他操作),我们应该看到活动 B 在启动时恢复(因为那是在堆栈的顶部)。所以我似乎无法弄清楚这里到底出了什么问题。

顺便说一句,在应用程序使用期间方向更改工作正常(一切都保存和恢复正常)。这个奇怪的问题已经困扰我一段时间了,通过反复试验,我发现当我禁用该活动的方向,然后尝试重新启动时,B 会按预期显示。

那么有没有其他人遇到过类似的情况,如果有,该如何解决?

我正在考虑将正在运行的活动保存在 SharedPreferences 中(如 in this post 所述),然后他们从活动 A 中恢复它,但是想知道我是否在这里遗漏了一些东西。 B restored on re-launch 不应该是默认行为吗?

【问题讨论】:

标签: android android-manifest


【解决方案1】:

尝试将此添加到清单文件中的活动中:

android:launchMode="singleTask"

这解决了我的应用程序中的问题....如果我正确理解您的问题。

【讨论】:

  • 会尝试,但仍然没有澄清我的疑问:(
【解决方案2】:

改用 android:launchMode="singleInstance"

【讨论】:

    【解决方案3】:

    在你的AndroidManifest中,在activity标签中,添加

    android:alwaysRetainTaskState="true"
    

    【讨论】:

      【解决方案4】:

      这是因为按下图标时正在启动另一个应用实例。

        // To prevent launching another instance of app by clicking app icon 
                      if (!isTaskRoot()
                              && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                              && getIntent().getAction() != null
                              && getIntent().getAction().equals(Intent.ACTION_MAIN)) {
      
                          finish();
                          return;
                      }
      

      在调用 setContentView 之前,在您的启动器活动中编写上述代码。这样就可以解决问题了

      【讨论】:

        【解决方案5】:

        此答案适用于因类似问题而来自搜索引擎的人。

        我有,

        Launcher Activity -> A 
        Main Activity -> B
        

        在按HOME 按钮或在应用程序位于B时从任务列表切换后总是启动A

        终于发现问题出在manifest里,去掉

        android:noHistory = "true"

        来自清单中 B 的 Activity 声明并已解决。

        【讨论】:

          【解决方案6】:

          我为这个问题找到了一个简单的单行解决方案

          Manifest的活动标签中添加这一行

          android:launchMode="singleInstance"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多