【问题标题】:Open Android App button does not return to the current Activity already open打开Android App按钮不返回当前已打开的Activity
【发布时间】:2014-07-30 14:40:43
【问题描述】:

有关活动启动模式的当前问题,请参阅更新 2

我正在开发一个 Android 应用程序。现在我有一个问题,一旦我在应用程序中打开一个新活动(不是android.intent.action.MAINandroid.intent.category.LAUNCHER 的活动),然后按主页按钮,然后按应用程序图标,应用程序不会导航我回到我已经打开的新活动(并显示在最近的应用程序列表中)。相反,它会打开一个新的 MAIN 活动。

我应该怎么做才能改变这种行为?

================================================ ====

更新

从主活动开始其他活动的代码

    startActivity(new Intent(MainActivity.this, LocalActivity.class));

AndroidManifest.xml

    <activity
        android:name=".MainActivity"
        android:theme="@style/AppDrawTheme"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".LocalActivity"
        android:launchMode="singleInstance"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:screenOrientation="portrait">
    </activity>

================================================ ====

更新 2

我通过改变来解决问题 android:launchMode="singleInstance"android:launchMode="singleTask"

虽然我不明白为什么singleInstance 会是个问题。 我应该如何理解 Google 在 Android 文档上写的内容“除了系统不会在持有实例的任务中启动任何其他活动”

【问题讨论】:

  • 例如,您可以将最后一个 Activity 类存储在首选项中,然后在 MAIN 的 onCreate 中,查看首选项中的这个键,然后运行正确的活动。
  • 默认情况下,android 会做你期望它做的事情,除非你在 Activity 中做一些可以防止这种情况发生的事情。您能否提供更多关于您在主要活动中所做的事情以及您从主要活动中启动的活动的信息?

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


【解决方案1】:

很可能您在调用startActivity() 时设置了导致此问题的Intent 标志,或者您在AndroidManifest.xml 中使用了导致此问题的活动属性。我需要查看您的清单或代码才能准确指出问题出在哪里。

更新

谷歌文档还说:

活动始终是其任务中唯一且唯一的成员。

您应该通过this page 仔细阅读有关任务和活动的信息。

基本上,当您开始主要活动时,它会在新任务中创建。下一个活动被放置在同一个任务中(在堆栈中)。现在,关键部分,Android 不仅恢复单个活动,而且恢复整个任务。这是默认设置。

如果您使用singleInstance,每个 Activity 都有自己的任务,并且当您再次启动应用程序时(在 HOME 按钮之后)Android 使用根 Activity 恢复任务,而不是您最后一次看到的 Activity。更改launchMode时要非常小心,如果不清楚它是如何工作的,那么您可能应该先找到它,否则将来您可能会有更多惊喜。

我希望你现在已经清楚了,如果没有,请阅读 linked 文档。

【讨论】:

    【解决方案2】:

    您应该在活动中使用onPause()onResume()

    【讨论】:

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