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

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

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

还有什么想法吗?

【问题讨论】:

    标签: android sqlite battery


    【解决方案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) 上不是线程安全的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多