0

我有 3 个活动:活动 A、B 和 C 活动 A 是我的登录活动,用户登录到他的帐户,活动 B 是仪表板,活动 C 是 ListView

在 Android 手机上:当我在 Activity C 上按下手机上的 Home 按钮时,它会将我带到手机的主屏幕,而当我尝试再次启动应用程序时,它会将我带到 Activity A 而不是我最初离开的 Activity C。

在模拟器上:当我在 Activity C 上时,我按下手机上的 Home 按钮,而当我尝试再次启动应用程序时,它会将我带到 Activity C。

此外,我在每个活动上都设置了 onResume,只是为了在活动恢复时检查手机是否可以访问互联网。现在的问题是我不明白为什么我在手机上的行为与我在模拟器上的行为不同。

我希望应用程序从我离开它的活动 C 开始。我想要与我在模拟器上获得相同的行为。

模拟器上也没有发生错误或崩溃。所以我很难找到问题所在。

请指导我该怎么做,或者请告诉我可能是什么问题。

谢谢你!!

4

3 回答 3

1

嗯,这两种行为都是正常的。这就是正在发生的事情:当您从“Activity C”按下主页按钮时,操作系统会将您带到 android 主屏幕,然后由操作系统决定是销毁 Activity 还是保留它(这取决于操作系统的资源需要)。

那么在模拟器上可能没有或很少有其他活动正在运行,因此操作系统不会破坏“活动 C”,当您重新启动应用程序时,它会将您带到仍然存在的“活动 C”。

与模拟器相比,您的设备必须运行大量其他应用程序和服务,并且需要资源来保持它们平稳运行,因此当您退出 Activity 时,操作系统会破坏该 Activity 并声明分配给该应用程序的资源。因此,当您启动应用程序时,它会从头开始重新创建或重新启动应用程序,在您的情况下是“活动 A”。

因此,它的行为非常正常,您应该担心它。

有关更多详细信息,您可以阅读内容。

于 2012-09-02T20:22:25.733 回答
1

关于您不使用 Eclipse 来启动应用程序 - 我想介绍另一种解决方案。

请查看 Manifest 中 Activity 标记的以下键:http: android:alwaysRetainTaskState //developer.android.com/guide/topics/manifest/activity-element.html#always

根据文档,它的默认值为 false。如果在任务根活动中设置为 true (我认为在你的情况下是 Launcher) - 它会告诉系统始终保持任务的状态并且不要重置它。因此,即使进程将被终止 - 重新启动后,您也应该出现在最新的任务状态。

但是,要小心,因为如果

  1. 您将不为任务的根指定它。
  2. 如果您在应用程序中为您的意图使用任务操作标志。例如 FLAG_ACTIVITY_CLEAR_TASK/FLAG_ACTIVITY_CLEAR_TOP/等

祝你好运

于 2012-09-02T20:54:33.827 回答
0

根据您使用的 Eclipse ADT 插件,手机上的行为可能是错误的,因为您是从 Eclipse 启动应用程序。您可以尝试“adb install your_app.apk”并从屏幕手动启动它,它可以解决问题。

一般来说,您描述的行为是设计好的行为,所以如果不中断(通过意图标志和清单语句) - 系统应该按照您的意愿行事,恢复最后一个活动及其状态。

祝你好运

于 2012-09-02T20:18:57.123 回答