我有一个包含3个活动的简单应用程序:
所有数据都由Web服务(餐馆描述和坐标)加载到第一个活动中,每个活动所需的数据使用intent.putExtra
在一个包中传递。
现在,当点击back button
时,所有内容似乎都运行顺畅(例如,点击地图上的后退按钮会恢复restaurant description
活动并正确设置所有数据),而我还没有完成关于生命周期的任何事情。
为什么呢?是否自动保存所有变量?我应该使用onSaveInstanceState()
和onRestoreInstanceState()
吗?
由于
月
答案 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