【发布时间】:2015-07-15 12:00:05
【问题描述】:
在我的场景中,它有 Sync_Class 与后台的 AsyncTasks 同步,从我的应用程序到我的服务器。 每次我的应用程序执行一个需要从我的 SQLite 更改数据的操作时,作为第一步,我的应用程序会更新我的本地数据库,因为第二步会在后台引发 AsyncTask 以开始与我的服务器同步。在 80% 的情况下,我的应用程序运行良好,但其他 20% 的情况下抛出 IllegalStateException,因为应用程序尝试重新打开连接或打开关闭的连接,而我有一种方法可以在上面 6 行以上打开数据库。在这种情况下,我认为问题在于数据库中的多个同时访问,我是对的吗?
在我可以阅读的不同帖子中,人们谈论 de SQLite 无法执行同时连接并且它序列化连接,因为文件结构不允许...最后一个问题是,如果我们使用 sqlite 连接执行多个 asyncTasks进行插入、更新和删除,通过并行编程利用处理器的全部功能,我们有什么工具可以做到这一点?或者这是一个不可行的选择,我们需要进行序列化连接?
如果您对我的问题有任何解决方案或任何想法,请帮助我!提前致谢!!
更多信息: 我的 BDDclass 有一个打开数据库的方法。当我需要在一个简单的函数或 void 中执行查询、原始查询等时,我调用我的数据库类,打开数据库,执行查询或多个查询,最后我们关闭数据库。当我知道在这种情况下我有一个带有查询的多个函数的大型进程时,我创建 BDDclass 并在开始时打开 bdd,最后关闭此进程的数据库。
我这样说是因为我可以看到一些人们推荐使用 SQLiteHelper 的帖子,因为这有助于在 SQLite 中管理多个同时连接,但其他帖子说有同样的问题...然后必须使用 SQLiteHelper ?还是不行?
如果您需要更多信息或其他信息,请告诉我。
【问题讨论】:
-
你不需要每次都打开和关闭你的数据库,你可以让它保持打开状态。我认为您可能对并发访问是正确的,但不能 100% 确定。这些真的是长期运行的操作吗?如果只是一秒钟左右(或更短),那么设置你的助手类(我认为这不是必需的,但非常方便)以进行同步访问可能还不错。
-
视情况而定!!这是我的同步类取决于我需要发送的信息量,设备可能在 2 天内不同步,然后我们有更多信息......那么永远不要关闭数据库是个好选择?我可以获得现有的数据库连接吗?
标签: android sqlite android-asynctask parallel-processing