从单独的进程中使用SQLiteOpenHelper

时间:2016-07-13 23:55:32

标签: android sqlite process sqliteopenhelper

我有一个意图服务,由alarmmanager触发,它每小时从服务器下载数据并在我的一个sqlite数据库表上进行插入。

我有另一个长时间运行的后台服务,它捕获SCREEN_ON操作,并在同一个数据库表上执行插入和读取。后台服务在其自己的进程中运行。这就是我在清单中声明它的方式:

 <service
    android:name=".MyBackgroundService"
    android:enabled="true"
    android:exported="false"
    android:process=":background"/>

我的问题是,如果巧合两个服务在同一时间进行数据库插入/读取,是否会导致崩溃我的应用程序等问题?如果是这样。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

是的,让多个进程同时写入同一个数据库会导致可能导致应用程序崩溃的问题(请记住数据库实际上是内部存储上的文件)。

ContentProvider是您在清单中注册的高级组件,允许多个进程(或其他应用程序,如果您使用android:exported="true")读取和写入数据并使用自然适合的基于Cursor的API使用基于SQL的数据库。

Creating a Content Provider training完成构建内容提供程序所需的步骤,包括构建Uri方案(一种唯一确定您正在讨论的表/行的方法) - 通常您可以替换直接使用等效于ContentResolver的数据库访问您的数据库。