我是 Android 开发的新手,并且编写了一个小应用程序,它调用 Web 服务并为一个相对简单的对象提供水合(想想:拍卖列表或类似的东西)。现在,当手机旋转并重新加载视图时,Web 服务被重新调用,对象被重新水化并重新显示列表。这似乎非常浪费。通过 onSaveInstanceState 存储数据时的最佳做法是什么?存储对象本身是否被认为是可以的,或者最好的做法是存储 ID 并完成每次重新加载它的整个过程。这里是否还有其他需要考虑的经验法则或陷阱?
谢谢
J.P
我是 Android 开发的新手,并且编写了一个小应用程序,它调用 Web 服务并为一个相对简单的对象提供水合(想想:拍卖列表或类似的东西)。现在,当手机旋转并重新加载视图时,Web 服务被重新调用,对象被重新水化并重新显示列表。这似乎非常浪费。通过 onSaveInstanceState 存储数据时的最佳做法是什么?存储对象本身是否被认为是可以的,或者最好的做法是存储 ID 并完成每次重新加载它的整个过程。这里是否还有其他需要考虑的经验法则或陷阱?
谢谢
J.P
对于 Android 配置更改场景,即使从数据库中重新创建信息通常也被认为是过多的工作。
您要使用的是创建一个类,该类包含对您希望在配置更改中幸存下来的对象的引用,并让您的 Activity 对此具有引用。此外,您将在onRetainNonConfigurationInstance()
回调中返回它。在onCreate()
中,您调用getLastNonConfigurationInstance()
以查看这是否是由于配置更改而重新创建的。此调用将返回您的对象以及您需要的所有数据。
由于您正在调用网络服务来填充您的列表,我想您应该存储列表的数据(调用网络服务会消耗时间并且如果您的用户没有稳定的连接可能会失败)。您可以通过不同的方式(例如数据库)执行此操作。如果用户重新启动您的应用程序,这种方法也会对您有所帮助,因为他不必等到 Web 服务响应。
另外:当您提出问题时,请重新考虑您的术语。您通常不会看到有人谈论物体的“水合作用”。谈论人口等更为常见。
如果您只想避免在方向更改时召回服务,那么您可以在活动标签中的清单中添加以下内容。
android:configChanges="导航|方向|keyboardHidden"
但正如@DigCamara 所说,他的方法是最好的,甚至对于重启等其他场景也很有用。