活动包,什么时候会丢失?

时间:2013-08-22 13:36:11

标签: android

当操作系统完全忘记有关某个活动的状态以及所有与活动相关的信息(有关活动的任何记录)时?

换句话说什么时候它会使Bundle成为一个新实例?

我找到了以下解释,但它没有解释这个“杀戮捆绑”点?

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/Activity.java#Activity.onSaveInstanceState%28android.os.Bundle%29

  

在被杀之前调用从活动中检索每个实例状态,以便可以在onCreate(android.os.Bundle)或onRestoreInstanceState(android.os.Bundle)中恢复状态(android.os.Bundle填充为这个方法将被传递给两个)。   在活动可能被杀死之前调用此方法,以便在将来某个时间返回时可以恢复其状态。例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态,以便在用户返回时对于活动A,可以通过onCreate(android.os.Bundle)或onRestoreInstanceState(android.os.Bundle)恢复用户界面的状态。   不要将此方法与活动生命周期回调混淆,例如onPause(),当活动被放置在后台或者去往破坏的路径时,或者在销毁之前调用的onStop()时,它会被调用。调用onPause()和onStop()时的一个示例,而不是此方法是当用户从活动B导航回活动A时:不需要在B上调用onSaveInstanceState(android.os.Bundle),因为该特定实例永远不会恢复,所以系统避免调用它。调用onPause()而不是onSaveInstanceState(android.os.Bundle)的示例是在活动A前面启动活动B时:系统可能会避免在活动A上调用onSaveInstanceState(android.os.Bundle),如果它不是'因为A的用户界面的状态将保持不变,所以在B的生命期内被杀死。   默认实现通过在具有id的层次结构中的每个视图上调用android.view.View.onSaveInstanceState()并保存当前焦点视图的id来为您处理大多数UI每个实例状态(所有其中由onRestoreInstanceState(android.os.Bundle)的默认实现恢复。如果重写此方法以保存每个单独视图未捕获的其他信息,则可能需要调用默认实现,否则请准备好自己保存每个视图的所有状态。   如果调用,此方法将在onStop()之前发生。无法保证它是在onPause()之前还是之后发生。

1 个答案:

答案 0 :(得分:1)

有很多情况会发生这种情况:

  

以下是small topic提及不同的参考文献   关于重建活动的用例。

如果您想要更好地控制应用程序生命周期:

  

查看application对象以获取更多信息。

个人建议:

  

我认为你不应该关心何时/什么,这是什么的   android系统会为你管理,你的代码应该优化到   处理所有用例(当bundle不为null时)。一束   应该只用于处理状态保持,如果你愿意的话   持久化数据你应该看看fileI / O,SQLlite或共享   偏好。