2

我有一个包含 3 个活动的简单应用程序:

  • 第一个包含一个搜索框,它调用 Web 服务并在列表视图中显示下面的结果(餐厅)
  • 当一个餐厅被点击时,另一个活动开始显示餐厅的描述和一个按钮“显示地图”
  • 当单击“显示地图”按钮时,猜猜看,地图显示在第三个活动中。

所有数据都由 Web 服务(餐厅描述和坐标)加载到第一个活动中,每个活动所需的数据使用intent.putExtra.

现在点击时一切似乎运行顺利back button(例如,点击地图上的后退按钮恢复restaurant description活动并正确设置所有数据),而我还没有对生命周期做任何事情。

为什么?是否所有变量都自动保存?我应该使用onSaveInstanceState()onRestoreInstanceState()

谢谢

七月

4

2 回答 2

0

当新的活动 B 在另一个活动 A 之上启动时,活动 A 默认不会被销毁,它会停止,然后您只需恢复它即可。如果系统需要资源,它可以破坏停止的活动。这里有一个很好的图表,它真正解释了组件的生命周期。

于 2010-06-14T16:08:18.370 回答
0

当您的活动停止时,活动对象将保留在内存中,并在活动恢复时被调用。您不需要重新初始化在导致 Resumed 状态的任何回调方法期间创建的组件。系统还会跟踪布局中每个视图的当前状态,因此如果用户在 EditText 小部件中输入文本,则该内容会保留,因此您无需保存和恢复它。

即使系统在停止时破坏了您的活动,它仍然会在 Bundle(键值对的 blob)中保留 View 对象(例如 EditText 中的文本)的状态,并在用户导航回活动的相同实例)。

http://developer.android.com/training/basics/activity-lifecycle/stopping.html

默认情况下,系统使用 Bundle 实例状态来保存有关您的活动布局中每个 View 对象的信息(例如输入到 EditText 对象中的文本值)。因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到之前的状态,而您不需要任何代码。但是,您的活动可能有更多您想要恢复的状态信息,例如跟踪用户在活动中的进度的成员变量。

注意:为了让 Android 系统恢复 Activity 中视图的状态,每个视图必须有一个唯一的 ID,由 android:id 属性提供。

要保存有关活动状态的其他数据,您必须重写 onSaveInstanceState() 回调方法。

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

于 2012-12-12T15:36:38.677 回答