The content of the adapter has changed but ListView did not receive a notification

The content of the adapter has changed but ListView did not receive a notification

Android開發過程中,使用了大量的ListView,發現這個錯誤偶爾會出現。特別是做壓力測試的時候,不停的點擊刷新,更容易出現這個錯誤。代碼中已經使用了AdapternotifyDataSetChanged()方法通知UI更新了,但是還是會出現這個錯誤。究其根本原因,還是線程之間同步的問題。比如,線程1更新了Adapter中的內容,卻還沒有來得及通知內容已經更新,就又有線程2更新了Adapter中的內容,這個時候如果線程1再通知內容更新,就會出現上述異常了。

 

在此提出一些解決辦法:

對線程進行管理,如果當前Actitivty暫停了,及時停止這些線程。

數據更新後,要及時使用notifyDataSetChanged()方法通知UI,避免出現數據不一致的情況。

數據的更新,最好放在主線程中進行。這樣可以使用同步數據更新與通知內容更新部分的代碼。

 

最後補充一條我最終解決問題的方法:

在用到多線程的時候,可以對數據做緩存處理, 比如與ListView綁定的數據存儲在ArrayList (dataList), 在線程中先將數據加入到臨時ArrayList(tmpList) , 最後在調用notifyDataSetChanged()方法通知UI更新之前, 把臨時ArrayList(tmpList)中的數據更新到ArrayList(dataList)中, 然後清空臨時ArrayList(tmpList)數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章