我正在使用greenDAO,目前进展顺利。然而,文档或网站(或任何地方 :( )似乎都没有涉及它如何处理线程安全的问题。
我知道其他地方提到的基本原则,例如“使用单个 DAO 会话”(Android + SQLite 的一般实践),并且我非常了解 Java 内存模型。该库内部甚至看起来是线程安全的,或者至少是有这个意图构建的。但是我没有看到任何东西涵盖以下问题:
默认情况下,greenDAO 会缓存实体。 这对于完全单线程的程序来说非常好 - 对于大多数用途来说,这是透明的,并且可以显著提高性能。但是,如果我例如loadAll()
然后修改其中一个元素,我将在整个应用程序中 全局 修改同一个对象。如果我在主线程上使用它(例如进行显示),并在后台线程上更新数据库(正常操作),除非采取额外的注意措施,否则会出现明显的线程问题。
greenDAO 是否在“幕后”做些什么以防范常见的应用程序级别的线程问题?例如,在 UI 线程中修改缓存的实体,同时在后台线程中保存它们(最好希望它们不会交错!特别是在修改列表时!)?是否有任何“最佳实践”可以防止这些问题,超出一般的线程安全考虑范围(即,greenDAO 预期并很好地处理的内容)?或者整个缓存从多线程应用程序的安全性角度来看存在致命缺陷?