在我的应用程序中,我必须实现一些 UI 和同步服务。
它在后台运行并更新数据。同步服务并不是很简单,它使用了多线程。
所以,这是我的故事:
当我开始开发这个应用程序时,我对sqlite一无所知,所以我只是没有在Java中使用任何线程同步。结果:我收到许多异常,例如“SQLiteException:数据库已锁定:BEGIN EXCLUSIVE;”
然后我使用常规 Java synchronized () {} 块同步所有事务。一切都变得好多了。但我使用 Cursors 为我的列表实现 CursorAdapter。因此,有时我会得到相同的“SQLiteException:数据库已锁定:BEGIN EXCLUSIVE;”
我最终创建了一个小型线程安全 SQLite 实用程序来处理所有线程安全的内容。另外,我必须为我的 UI 使用类似 ArrayAdapter 的东西(从 Cursor 读取所有数据并在读取后关闭它,同时同步此块)。所以,它工作正常
但是,我不喜欢这种处理 UI 的方式,因为使用此解决方案 UI 变得非常慢 - 从游标读取一些数据相当快,但比使用 CursorAdapter 慢
那么,谁找到了这个问题的答案呢?
谢谢
于是,终于得出了解决方案。这里是。
我阅读了一些论坛、谷歌群组,发现 sqlite 数据库应该只打开一次。所以,我使用单例实现了这个。
另外,我实现了一些数据库代码来同步所有写操作(以防止许多线程同时执行写操作)。
而且我不关心打开光标、从中读取内容。
经过几天的测试,我没有收到用户的错误报告,所以我认为这可行
在我之前的工作中,我在应用程序中多次打开 sqlite 数据库,这就是问题所在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)