android - SQLite 是否适合在复制到服务器之前进行离线存储?

标签 android sqlite

我正计划编写一个可以保存大量数据的应用程序。过去,我只是简单地将数据直接写入服务器,并且只使用一些简单的键/值存储和本地存储的共享首选项。

这次我在考虑,先用SQLite保存信息,然后在后台同步数据到服务器。这将在以下几个方面为用户带来好处:1) 可以离线使用应用程序 2) 不必担心数据会立即保存,只要有可能就会发生 3) 可靠性更高。

我的方法是在 UI 使用期间从 SQLite 获取/设置数据,并使用后台进程查找新行并将它们放在服务器上,并在发生时将它们标记为已同步。

这听起来合理吗?

最佳答案

您可以在您的场景中使用 SQLIte。但是,在实现时,您可以采用任何一种方法。

方法 #1:使用抽象工厂实例化 SQLiteOpenHelper。

方法 #2:将 SQLiteDatabase 包装在 ContentProvider 中

请参阅此链接了解如何实现这两种方法。 http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

使用SQLite需要注意的要点

  • Sqlite 负责文件级锁定。
  • 多个线程可以读,一个可以写。锁可防止不止一个 写作。
  • Android 在 SQLiteDatabase 中实现了一些 java 锁定以帮助保持 事情直截了当。
  • 如果我们从多个线程错误地处理数据库并弄乱代码,您的 数据库不会被破坏。 只有少数更新会丢失。

“多线程 - 数据库访问”如何用于您的场景

SqliteOpenHelper 对象保持一个数据库连接。

如果您尝试同时从实际的不同连接(多个线程)写入数据库,一个将失败。它不会等到第一个完成后再写。它根本不会写您的更改。更糟糕的是,如果你没有在 SQLiteDatabase 上调用正确版本的插入/更新,你将不会得到异常。您只会在 LogCat 中收到一条消息,仅此而已。

因此建议使用单线程写入并在必要时从多线程读取以加快访问速度。

关于android - SQLite 是否适合在复制到服务器之前进行离线存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030441/

相关文章:

Android studio 创建.jar 文件而不是.aar 文件

python - 存储空间数组 SQLite3

python - 使用 SQLite3 + Mutagen 优化 Python 代码

perl - DBD::SQLite:插入或更新 - 问题

iphone - 我们可以直接访问核心数据的SQLite数据库吗

android - 如何找到当前位置并在该位置做标记。?

android - 通过蓝牙发送字符串,我需要一些信息

android - 如何在android中自动滚动 ListView ?

java - 如何获取 XML 中特定标签的列表

python - 通过 python sqlite3 连接到在线数据库