我和greenDAO一起去了,到目前爲止它的情況非常好。有一件事似乎並沒有被文檔或網站(或任何地方:()所涵蓋,它是如何處理線程安全的。是否有greenDAO線程安全最佳實踐?
我知道其他地方提到的基本知識,比如「使用單一的dao會話」(一般練習對於Android + SQLite),我很理解Java內存模型,庫內部甚至出現線程安全,或者至少是用這種意圖構建的,但我沒有見過這種內容:
greenDAO默認緩存實體這對於完全單線程的程序來說非常好 - 對於大多數用途來說透明和大規模的性能提升。但是,如果我例如loadAll()
然後修改其中一個元素,我正在修改同一個對象global通過我的應用程序,可以使用。如果我在主線程上使用它(例如用於顯示),並且在後臺線程上更新數據庫(如果是正確的話),除非格外小心,否則存在明顯的線程問題。
greenDAO做了什麼「底層」防範常見的應用程序級線程問題嗎?例如,修改UI線程中的緩存實體,同時將其保存在後臺線程中(更好地希望它們不交織!特別是在修改列表時!)?除了一般的線程安全問題(即greenDAO期望並且可以很好地工作)之外,是否有任何「最佳實踐」來防範它們?或者,從多線程應用程序安全角度來看,整個緩存是致命的缺陷?