我有一个Android应用程序,其中一个“home”或“main”活动依赖于片段来完成多个任务。这些数据依赖于从服务器检索到的信息(我的,可能是谷歌地图的大量信息)。
我想构建我的代码,以便其他几个活动(即首选项)可以在返回主活动之前暂时关注。
目前,android会破坏并重新创建主要活动,这意味着每次都会浪费带宽。
有几个值得注意的意图标志可以“解决”这个问题(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
和Intent.FLAG_ACTIVITY_CLEAR_TOP
),但它们在转换回主要活动时似乎很有用,这意味着我必须{ {1}} @override
和onKeyDown()
的系统行为。我真的不想这样做,以防它引起其他问题或最终被弃用。
这样安全吗?或者是强制我的应用程序创建主活动的序列化(savedInstanceState)以及所有片段随时另一个活动暂时占用前景的更好的解决方案?
答案 0 :(得分:0)
使用已保存的实例状态是正确的方法。这将使您在重新创建活动时保留从服务器检索到的信息。
您只需要实现代码来保存/恢复包含数据的片段或活动中的实例状态。如果要跨所有片段共享该数据,可以将其放在活动中并添加代码以保存活动的实例状态。然后,您可以使用((MainActivity)getActivity()).getData()
从您的片段中访问存储在活动中的数据。
要保存和恢复实例状态的代码,请查看:
http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState http://developer.android.com/training/basics/activity-lifecycle/recreating.html#RestoreState
如果您需要保留的数据非常大,则可以使用保留的片段,如下所述:
http://developer.android.com/guide/topics/resources/runtime-changes.html#RetainingAnObject
大数据对象的另一个技巧是在方向发生变化时使用单例类来存储数据。