Android数据库锁定行为

时间:2011-01-25 23:17:44

标签: android database sqlite locking

我仍然没有真正围绕同步。我知道它就在那里,我知道为什么它被使用以及它背后的想法是什么,但我缺乏实际技能和现实世界的例子来准确理解它是如何工作的以及当几个活动试图读/写数据库时它是如何实现的同时。您是通过应用程序共享对象,还是系统足够智能以同步相同类型的各种对象?

也许内容提供商是一种更好的方式,据我所知,它已经内置同步。

我离题了。

我仍然对数据库活动感到困惑。请记住,我在后台运行每60秒运行一次服务,读取更新函数正在写入的同一个表。是的我想改变这一点,但是现在我想要更多地了解Android中的数据库处理并找出正在发生的事情。

如果我有一个循环,例如:

db = provider.getReadableDatabase();
while(theres_still_work_today) {
  do_some_calculations;
  update_database;
}
provider.close();

这可以作为一个独立的工作。如果我尝试将它放在一个线程中,我会得到关于锁定的错误。但是这样跑的时候:

while(theres_still_work_today) {
  do_some_calculations;
  db = provider.getReadableDatabase();
  provider.close();
  update_database;
}

我发现奇怪的是,这实际上看起来更快,并且没有锁定问题。

我是不是很幸运,我没有同时触发两个事件导致锁定? Android / SQLite中的数据库处理是否存在某种超时?

我不明白为什么最后一段代码应该正常工作,为什么它应该更快?

虽然我对Android模拟器并不完全有信心。如果我在循环外部使用单个打开/关闭的第一个选项,有时即使服务在后台触发,我也可以通过很长的循环。

其他时候它会随心所欲地崩溃。

我也不知道为什么“isDatabaseLockedByOtherThreads()”没有报告它被其他线程锁定。

有什么建议吗?

由于 西蒙

0 个答案:

没有答案