我有一個項目通過適配器在列表視圖中顯示RealmObjects。該領域在每幾分鐘運行一次的SyncAdapter中進行更新。這從服務器拉取數據,並更新領域,有時會導致RealmObjects被刪除。當此後臺SyncAdapter的同步週期完成時,它會發送ListView的託管活動捕獲的廣播,這會導致該活動重新查詢領域並使用更改後的數據重新填充適配器。通過背景同步刪除的列表視圖中的領域對象導致崩潰
問題是,當用戶滾動ListView時,適配器正在從領域對象中獲取字段以構建視圖。如果當時同步運行,並且從領域(通過SyncAdapter)刪除了一個對象,則應用程序在嘗試從已刪除的對象構建視圖時會崩潰。
什麼是處理這種情況的好模式?我想在UI方面添加一個領域觀察器,並在發生火災時立即查詢和重新設置適配器的RealmObject列表,但競爭條件仍然存在,它只是一個較短的窗口。
我也想過在UI線程的領域設置自動更新爲false,並實施一些邏輯手動刷新UI線程領域時,檢測到更改。
還有其他想法嗎?
如果您的同步適配器在後臺線程上運行。在RealmResults上註冊ChangeListener並在觸發時刷新ListAdapter就足夠了。唯一一次由於刪除對象而導致崩潰的情況是,如果您在刷新範圍之外保留對它們的引用。 –