2013-03-06 46 views
1

我是Android开发的新手,已经编写了一个小应用程序,调用Web服务并保存相对简单的对象(想想:拍卖列表或某种程度的)。现在,当电话旋转并重新加载视图时,Web服务被重新调用,对象被重新润湿并重新显示列表。这看起来非常浪费。通过onSaveInstanceState存储数据时的最佳做法是什么?存储对象本身是否被认为是可以的,或者最好的做法是存储ID,并且每次都要经历新加载的整个过程。这里有没有其他的经验法则或难题?Android - 我是否应该通过saveinstancestate保存我的对象或其ID?

谢谢

JP

回答

2

即使从数据库重新创建信息通常也被认为是Android配置更改场景的过多努力。

你想要使用的是创建一个持有对象的引用的类,你想要在配置更改中生存下来,并让你的Activity有一个引用。另外,您将在onRetainNonConfigurationInstance()回调中返回。在onCreate()中,您致电getLastNonConfigurationInstance()以查看由于配置更改是否这是重新创建。此调用将返回您的对象与您需要的所有数据。

1

既然你调用一个Web服务来填充你的清单,我想你应该存储列表的数据(调用Web服务消耗的时间和可能会失败,如果用户没有按没有稳定的连接)。你可以用不同的方式来做(例如数据库)。如果用户重新启动应用程序,这种方法也可以帮助你,因为他不必等到网络服务响应。

另请参见:当您提出问题时重新考虑您的术语。你通常不会看到有人在谈论物体的“水合”谈及人口等问题更为常见。

+0

这实际上取决于是否所有数据都必须永久保留。如果是,那么我同意你的意见;如果没有,你建议的方法不是最好的Android实践。我会假设@JP提到的拍卖名单有些临时性。 – 2013-03-06 15:44:48

+0

@ClassStacker你是对的。它取决于所涉及的变量以及数据的持续性。 – DigCamara 2013-03-06 15:46:57

+0

我20年来一直是开发人员,不会很快改变我的术语。你会发现水合是常用的,特别是在ORM世界。鉴于填充和水合是任意的术语,我不认为这个问题... – 2013-03-10 18:42:03

0

尽可能多地缓存数据,每个数据连接在时间,资源和最终电池寿命方面都具有“标准”成本。

尝试对您的请求进行分组,并将其全部置于一次,并尽可能缓存响应。

Good read about network on android developers

0

如果你只是想避免召回服务时方向的变化,那么你可以在下面的清单中的活动添加标签。

机器人:configChanges =“导航|方向| keyboardHidden”

但作为@DigCamara说,他的做法是最好的,其他场景,如重新启动,甚至是有用的。

相关问题