一个简单的Android应用程序的生命周期

时间:2010-06-13 11:55:04

标签: android lifecycle

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

  • 第一个包含一个搜索框,该搜索框调用Web服务并在列表视图中显示下面的结果(餐馆)
  • 点击餐厅时,会启动另一项活动,显示餐厅的描述和“显示地图”按钮
  • 点击按钮“显示地图”时,猜猜是什么,地图会显示在第三个活动中。

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

现在,当点击back button时,所有内容似乎都运行顺畅(例如,点击地图上的后退按钮会恢复restaurant description活动并正确设置所有数据),而我还没有完成关于生命周期的任何事情。

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

由于

2 个答案:

答案 0 :(得分:0)

当新活动B在另一个活动A之上启动时,默认情况下不会销毁活动A,它将变为已停止,之后您只需恢复它。如果系统需要资源,它可以破坏已停止的活动。有一个很好的图here可以真正解释组件的生命周期。

答案 1 :(得分:0)

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

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

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

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

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

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

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