两个应用程序使用同一个数据库。
在上述内容中,出现了一个问题:当一个线程正忙于与远程服务器通信时,另一个线程不能将数据存储到SD卡中。为什么会出现这个问题呢?
问题的原因是由于网络访问线程中的某个同步锁设置得过宽,当这不是必需的时候,你会将数据库锁住。解决方法是将网络访问代码移到不会对数据库进行加锁的同步语句或方法之外,尽快地开始和结束数据库操作,期间不进行其他活动。
另一个问题是需要检查新数据是否已更新到服务器。所以我每30秒打开一次数据库,如果从服务器返回的响应失败,就会锁定数据库。解决方法是在打开数据库之前先通过网络与远程服务器通信,并在已获得响应后再打开数据库。无论网络状况好坏,甚至是断网,都应该在开始使用数据库之前完成与服务器的通信。
这个问题是由于并行执行引起的。似乎Sqlite不是线程安全的。
为了解决这个问题,我们应该将网络访问代码移到数据库加锁的同步语句或方法之外,并在与服务器通信后再打开数据库。此外,需要注意Sqlite不是线程安全的。