我们应该经常在android中与数据库存储进行交互吗?

时间:2016-07-19 17:48:59

标签: android performance android-sqlite

在经常与数据库存储交互时,android的性能是否会降低? 是否更好地从DB加载对象并传递它们或经常访问数据库以获取对象?
我想是否因为每次从结果集中实例化对象而访问数据库会产生更多开销。

2 个答案:

答案 0 :(得分:2)

  

我在考虑访问数据库是否由于每次都从结果集中实例化对象而产生更多开销。

是的,确实如此,如果你担心性能,就不应该使用ORM工具来实例化对象。

  

在经常与数据库存储交互时,android的性能是否会降低?

可能......你正在从磁盘读取,这比内存存储更慢(提示,SQLite can do

  

从DB加载对象并传递它们或经常访问数据库以获取对象是否更好?

取决于您需要实际类对象的上下文。如果将数据存储在数据库中,则只应在需要时查询该数据,将其加载到对象中,然后执行任何计算逻辑并保存。至少,这是我对此事的看法。您不应该在活动之间序列化任何对象,主要是因为如果您更新一个活动中的对象,将其传递给另一个活动,然后不要忘记将其保存回数据库,您可能会丢失状态。

答案 1 :(得分:0)

谷歌写道:

  

注意:因为它们可以长时间运行,所以请确保在后台线程中调用getWritableDatabase()或getReadableDatabase(),例如使用AsyncTask或IntentService。

使得与主线程之外的数据库进行交互。所以它可能不是immadiate,所以用户会看到应用程序或快速出现的进度条或某事的延迟。特别是当有关于' union'加入'。但在大多数情况下,它足够快。

关于您的thinkig访问对象的内存缓存。这说得通。与Google here提供的图片完全相同。所以在你的情况下db是盘缓存其他是相同的。您需要为对象提供一些内存缓存,但要注意。如果你使用大量的,或者每个都很重,你需要提供的不仅仅是Map的简单包装,它存储你的对象,而是像LruCache这样的东西。

所以收集所有内容,你将从db接收数据,然后将其存储在内存中,直到app需要更多内存。