Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的多个数据库连接(来自活动和服务)_Android_Sqlite_Android Activity_Intentservice_Database Locking - Fatal编程技术网

Android中的多个数据库连接(来自活动和服务)

Android中的多个数据库连接(来自活动和服务),android,sqlite,android-activity,intentservice,database-locking,Android,Sqlite,Android Activity,Intentservice,Database Locking,我想使用SQLite数据库在Android应用程序中存储数据。没问题。但是在每天10点、14点、18点和22点的预定义时间间隔,我想运行一个IntentService,它也需要访问数据库。问题来了: 当用户在启动IntentService时使用应用程序时,会出现问题,因为活动中有一个数据库连接处于活动状态,而IntentService中将建立一个数据库连接。所以数据库将被锁定,IntentService将失败,对吗 在这些情况下,IntentService如何实现这一点,只需等待活动完成当前操作

我想使用SQLite数据库在Android应用程序中存储数据。没问题。但是在每天10点、14点、18点和22点的预定义时间间隔,我想运行一个IntentService,它也需要访问数据库。问题来了:

当用户在启动IntentService时使用应用程序时,会出现问题,因为活动中有一个数据库连接处于活动状态,而IntentService中将建立一个数据库连接。所以数据库将被锁定,IntentService将失败,对吗

在这些情况下,IntentService如何实现这一点,只需等待活动完成当前操作SELECT、UPDATE等,然后正常运行

在我的活动中,我在onCreate中通过SQLiteOpenHelper打开数据库连接,并在onDestroy中关闭它。这是否意味着IntentService在此期间不可能在数据库上工作

所以数据库将被锁定,IntentService将失败,对吗

如果它们同时对单独的SQLiteDatabase对象执行操作,则为“是”

在这些情况下,IntentService如何实现这一点,只需等待活动完成当前操作SELECT、UPDATE等,然后正常运行


无论是通过单例、自定义应用程序对象还是ContentProvider,为活动和服务使用单个SQLiteOpenHelper实例。

非常感谢!自定义应用程序类听起来不错。但是,当我使用这个自定义类时,创建和关闭是什么时候完成的?@MarcoW:您可能会触发在创建应用程序时打开数据库,或者延迟创建它,正如您所认为的那样,只需在后台线程上这样做。很可能,您永远不会关闭它,只会在进程终止时让SQLiteOpenHelper与其他所有东西一起被丢弃。它工作得非常好,谢谢!我真的从未对数据库对象或SQLiteOpenHelper调用close吗?但是,插入数据库的数据是否安全,不会丢失?他们会马上提交吗?@MarcoW.:插入数据库的数据是否安全,不会丢失对他们会马上提交吗是的,谢谢,真是一个很好的解决方案!