我知道在正常情況下,無法在後臺線程中調用ListAdapter.notifyDataSetChanged()來更新列表視圖。所以,我想解決這樣的:在後臺線程中修改適配器
class mythread extends thread {
private ListAdapter listAdapter;
...
public void run() {
listAdpater.setNotifyOnChange(false);
listAdapter.addAll(A_LARGE_ARRAY);
}
...
}
當線程完成後,將消息發送到UI線程運行的處理程序,它會調用listAdapter.notifyDataSetChanged()來更新列表視圖。
這似乎工作,除了當我試圖調試它時,調試器抱怨像「適配器已更改,而listview沒有收到通知。確保您只修改UI線程中的adpater」。
即使我叫setNotifyOnChange(false),android框架是否監視適配器的修改?有什麼方法可以解決嗎?
PS。在我自己的基準測試中,通過將listAdapter.addAll(A_LARGE_ARRAY)移動到後臺線程,它爲我節省了大約126ms的執行時間,這意味着如果我在UI線程中修改適配器,它將被阻塞126ms。
UPDATE
任何人誰遇到這個問題,請參閱本Google I/O Lecture鏈接。這真的很有幫助。
感謝您的詳細解釋。 – Lion