在我们的应用程序中,当用户在模式(不同的用户/不同类型的屏幕)之间切换时,活动会重新创建自己(通过显式调用recreate())。我们雇用的外部程序员添加了此行为。他说这是完全正常的。
我遇到的问题是所有活动状态的99.9%是相同的。但是当重新创建活动时,所有数据都会再次被查询,耗费了相当多的时间。
这是正常模式吗?或者只是根据新情况更改数据一样好吗?
答案 0 :(得分:2)
对我来说,手动重新创建整个Activity只是为了重新加载一些数据似乎有些奇怪。在任何情况下,只更新实际更改的数据似乎是一个更好的方法。特别是如果你说重新加载所有数据需要相当多的时间。
我现在能想到的唯一需要重新创建Activity的东西就是改变语言环境或类似的东西,但即使我不推荐,除非它确实是必要的。如果您不处理配置更改,例如locale,没有理由重新创建整个Activity只是为了重新加载一些数据。
答案 1 :(得分:0)
我认为它是“正常的”,因为系统一直在重新创建活动,所以这只会增加另一个会发生这种情况的事件。虽然这本身就是一种非常奇怪的方式。一种更好,更有效,更清洁的方法是在“模式改变”上交换碎片。您可以为每个“模式”创建一个UI片段,并将数据存储在每个拉出的保留片段中。这也有助于在不必使用每个片段交换重新创建UI的意义上。
但是,如果必须,您绝对要求遵循与系统终止并重新创建活动时相同的数据存储/检索方法。见How to save state during orientation change in Android if the state is made of my classes?
基本上,您不应该重新创建已有的数据。