对象是否在活动之间导航?

时间:2011-07-06 14:26:38

标签: android android-activity

我有一个导航到相同活动但每次活动加载不同参数的应用程序。在我的应用程序中,它是从url检索的已解析数据内容。我要问的第一件事是:当我按下设备的后门按钮时,我得到了我之前的活动而没有被重新创建。这些活动中的对象是否存活,我可以参考它们吗?

第二个问题是如果我的第一个问题没有意义,你建议我做什么?

3 个答案:

答案 0 :(得分:1)

如果您查看活动生命周期,您会注意到只要您的手机有足够的内存,您的第一个活动就会保留在内存中,并且任何成员都会将其保存在内存中。

但是如果您的手机需要一些内存,它可以杀死后台保存的任何活动(任何活动,但显示给用户的活动),这意味着您将丢失第一个活动中的任何数据。

要知道发生了什么,请记住,当您的活动被带到前台时(无论是在创建时还是在导航回到它时),都会始终调用onResume()方法,但是onCreate()将仅被调用从头开始创建应用程序时(意味着您没有任何已保存的数据)。

您应该使用捆绑机制在活动暂停时保存数据,并在您恢复活动时加载它。阅读Android文档中关于Saving Activity state的段落,了解如何使用它。

答案 1 :(得分:0)

保证,一旦你离开Activity,内存数据就会存在。仔细阅读开发指南的这一部分,了解Activity的生命周期:http://developer.android.com/guide/topics/fundamentals/activities.html

如果您需要保留信息,则应覆盖活动的onPauseonStop和/或onDestroy方法。然后,您可以使用SharedPreferencesSQLite database或甚至是平面文件来保存您的状态。

答案 2 :(得分:0)

在清单文件中,将以下内容添加到活动中:

机器人:launchMode = “singleTop”

在您的示例中,当您使用后退按钮导航回活动时,您将从堆栈中调出活动。当您导航到应用程序内部的活动时,正在创建的是一个新活动,而原始活动仍在堆栈中。如果在应用程序中导航活动时,singleTop启动模式会将活动弹出堆栈,如果它不在堆栈中,则仅创建一个新活动。

每次在应用程序中启动活动时,如果没有singleTop,它将创建一个新实例,您会发现由于多个实例,有时您必须多次点击同一活动的后退按钮。