【问题标题】:Android Home button not resuming last ActivityAndroid Home按钮未恢复上一个活动
【发布时间】:2011-07-13 22:11:58
【问题描述】:

我正在尝试解决与此处所做的类似的问题 (link text)

除了在我的情况下,当用户在按下主页按钮后恢复应用程序时,活动 A、启动活动 B、启动活动 C - 我希望显示最后一个活动 C。相反,正在发生的事情是我回到了 A。

另外,我发现即使退出应用程序,如果我按住主页按钮,我的应用程序仍然列为活动应用程序,即使在 LogCat 中我可以看到它退出正常。

另外,如果这很重要,我最近确实添加了android:launchMode ="singleTask" 以使某些通知逻辑正常工作。不过在那之前我看到了主页按钮的行为。

我非常感谢您的任何想法。

[编辑 - 添加一些代码 sn-ps]

        <activity 
              android:name         =".connection.ActivityA"
              android:label        ="@string/app_name"
              android:configChanges="orientation|keyboardHidden"
              android:theme        ="@android:style/Theme.NoTitleBar"
              android:launchMode   ="singleTask"
              android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name  ="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name         =".screens.AvtivityB"
              android:label        ="@string/app_name"
              android:configChanges="orientation|keyboardHidden"
              android:theme        ="@android:style/Theme.NoTitleBar"
              android:launchMode   ="singleTask"
              android:screenOrientation="portrait"  >
    </activity>

    <activity android:name         =".screens.ActivityC"
              android:label        ="@string/app_name"
              android:configChanges="orientation|keyboardHidden"
              android:theme        ="@android:style/Theme.NoTitleBar"
              android:screenOrientation="portrait" >
    </activity>

下面是我开始每个活动的方式: 在活动 A 中:

private void startActivityB() { Intent activityBIntent = new Intent(this, ActivityB.class); this.startActivityForResult(activityBIntent , ACTIVITYB_TAG); }

Activity B 实际上有几个 Activity 可供它选择(它有一个 Intent 列表)根据它接收到的输入来显示,但启动它们的方式与 Activty A 启动 B 的方式相同。一旦显示第一个 Activity,用户滑动屏幕导航到左侧或右侧屏幕。当用户向左或向右滑动时,当前 Activity 会将信息放入其返回 Intent 中,Activity B 使用该 Intent 来显示下一个 Activity。此外,由于用户控制之外的逻辑可能会提示更改显示的屏幕,因此每个 Activty 调用都会在 onStop 中自行完成,以避免返回按钮问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    当您长按主页时,它会显示最近活动应用程序的列表,而不是当前正在运行的应用程序。因此,即使您的应用已关闭,您仍应在列表中看到您的应用。

    docs注:

    其他模式——singleTask 和 singleInstance — 不合适 对于大多数应用程序,因为他们 产生一个交互模型,即 用户可能不熟悉,并且 与大多数其他人非常不同 应用程序。

    我想您使用 singleTask 会影响历史堆栈,从而阻止 Activity C 被记住。如果你从活动 C 中删除它,它是否解决了问题?

    否则,我会查看您在 onPause/onDestroy 等中为 Activity C 执行的操作。您是否在执行会导致它完成或关闭的操作?

    【讨论】:

    • 我只在 Activity A 上设置 singleTask。我没有为 B 或 C 设置任何东西。
    • 好的,我没有玩过 singleTask 很多...从文档看来你应该没问题,但作为一个试验,我会删除它,看看是否能解决你的行为。这至少应该为您提供一些有关将精力集中在哪里的信息。如果不是问题,那么您需要查看您在 Activity C 中所做的事情,这可能会导致它过早退出。
    • 我在 Activity A 上删除了对 singeTask 的调用,但仍然得到相同的行为。我没有在活动 B 或 C 中覆盖 onPause 或 onDestroy。
    • 或许您应该发布您的相关代码、清单、Activity C 的部分等。
    • 感谢您的见解,我决定暂时保留主页按钮功能。
    【解决方案2】:

    只有从 Eclipse 运行时才会出现这种行为吗?

    检查您的“运行配置”。有一个“启动动作”可以设置为“什么都不做”。

    马特

    【讨论】:

    • 感谢您的建议!我实际上只是在重新审视这个问题,因为它真的让我很恼火。我已经按照您的建议调出了我的运行配置,并且启动操作设置为启动默认活动。有趣...我今天早上一定会进一步检查一下。非常感谢。我会在几个小时后发布后续的 cmets。
    • 无论是从 Eclipse 安装和运行,还是通过单击我的应用程序图标运行,我过去和现在仍然看到相同的行为。在我的 Logcat 中,我可以看到我的轮询器继续运行并且 Activity C 接收数据。我按住主页按钮并弹出带有应用程序图标的弹出窗口。当我选择我的 logcat 显示 ActivityManager “开始活动:Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=com/ActivityA bnds=[3,238][ 77,317] }
    • 我将编辑我的原始帖子,看看是否可以添加一些代码 sn-ps。我在通知方面遇到了类似的问题。我真的相信他们是相关的。谢谢!
    【解决方案3】:

    我不确定这是发生在你身上的事情,但下面的答案解决了我的问题,我想要和你一样的行为——也就是说,在 home 被推后重新打开时进行相同的活动(虽然在我的情况下,我确实想要第一个活动,而不是一个新活动):

    Save activity state in android when home button pressed

    现在我意识到您希望保持活动堆栈完整,而不是像我一样转到第一个活动。但如果是同样的问题,那么这不是因为活动堆栈被拆除,而是因为在第一次安装时按下主页后重新打开时添加了一个新的(带有打开活动的)。我希望这是相当清晰的,即使我(显然)发现很难解释。

    编辑:更好地描述 herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多