Android 数据存储 - 文件与 SQLite

Posted

技术标签:

【中文标题】Android 数据存储 - 文件与 SQLite【英文标题】:Android data storage - File vs SQLite 【发布时间】:2010-12-20 16:12:49 【问题描述】:

我正在开发一个定期向外部服务器发送信息的应用程序。我制作了正在发送的数据的本地副本,用于备份目的。

在节省电池寿命方面,存储数据的最佳选择是什么?每个数据提交都是一个序列化的对象(该类有5个字段,包括日期、数字和字符串),大小约为5K-10K。

还有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为使用 SQLite 还是文件并不重要,因为 SQLite 数据库只是系统上的一个文件(存储在 /data/data/<your_package>/databases/ 中)。您需要在正确的时间提交到数据库,就像您需要在正确的时间将文件保存到硬盘驱动器一样。换句话说,一种或另一种方式,您可以使用尽可能多的硬盘写入。

我认为您选择什么更多地取决于您要保存的数据类型。如果您需要拥有数据库可以赋予的权力(例如查询),那么一定要使用 SQLite。但是,如果您不需要数据库,或者您的数据变化很大(并且无法在关系数据库中轻松设置),那么我会选择文件。

我可以肯定地告诉你的是,如果这是你选择的路线,你应该使用序列化来保存文件。 android序列化慢,慢,慢,创建大文件。出于性能原因,最好编写自己的 XML 或 JSON 格式。

【讨论】:

【参考方案2】:

我不直接了解电池寿命,但一个标准是哪个更容易管理?管理数据的操作越少意味着 CPU 周期越少,电池寿命就越长。

我会说 SQLite 选项更容易。您可以在 SQLite 表中放置一个日期列,该表存储您的数据,这使得删除您不需要的旧提交变得非常容易 - 并且所有这些都通过本机 SQL 库处理。使用您自己的 Java 代码管理整个文件负载 - 或更糟糕的是单个文件 - 工作量会大得多。

此外,您可以将数据写入数据库,然后忘记它,直到您需要再次读取它。如果您将数据存储在文件中,则需要根据Android application life cycle 的条款确定何时应该读取和写入文件。如果您担心电池问题,您可能不希望更频繁地写入文件,并将数据缓存在内存中,但您需要确保在应用暂停或销毁时没有丢失任何数据.在我看来,使用 SQLite 数据库要容易得多,而且不用担心这些。

【讨论】:

感谢您的cmets,看起来很合理。您是否知道数据库是始终在后台运行(作为传统数据库),还是仅在应用程序使用它时才运行?我的意思是,如果“SQLite 服务器”(如果 Android 中存在这样的进程)只是因为我的应用程序而启动......也许这不是一个好主意。 afaik sqlite 只是一个通过库访问的文件,没有运行数据库服务器。【参考方案3】:

您的应用程序是多线程的吗?如果您有多个线程访问数据存储,那么我会使用 SQLite。让 SQLite 担心锁定问题。

【讨论】:

警告,SQLite 在某些平台 (Xamarin) 上不是线程安全的

以上是关于Android 数据存储 - 文件与 SQLite的主要内容,如果未能解决你的问题,请参考以下文章

Android 拷贝SQLite数据库文件到手机的内部存储

Android-SQLite数据库实例

在 Android 中将 Sqlite 数据库与远程服务器同步

Android数据存储之SQLite数据库

转载Android数据存储之SQLite

Android中数据存储——SQLite数据库存储数据