在ListView中異步加載數(shù)據(jù)的常見方法有兩種:使用AsyncTask和使用線程池。
使用AsyncTask:
- 創(chuàng)建一個繼承自AsyncTask的類,并重寫其doInBackground()方法,在該方法中執(zhí)行耗時操作,如從網(wǎng)絡(luò)加載數(shù)據(jù)。
- 在doInBackground()方法中,通過publishProgress()方法來更新進(jìn)度。
- 在重寫的onProgressUpdate()方法中,更新UI界面,如將加載的數(shù)據(jù)添加到ListView中。
- 在重寫的onPostExecute()方法中,更新UI界面,如提示加載完成或顯示加載失敗信息。
- 在ListView的適配器中,根據(jù)需要實現(xiàn)getItem()、getCount()等方法。
使用線程池:
- 創(chuàng)建一個線程池對象,如ExecutorService executor = Executors.newFixedThreadPool(5)。
- 在需要異步加載數(shù)據(jù)的地方,將任務(wù)提交給線程池執(zhí)行,如executor.execute(new Runnable() { … })。
- 在任務(wù)的run()方法中執(zhí)行耗時操作,如從網(wǎng)絡(luò)加載數(shù)據(jù)。
- 在run()方法中,通過Handler將加載的數(shù)據(jù)發(fā)送給UI線程,如handler.sendMessage()。
- 在UI線程中的Handler中,通過接收到的消息更新UI界面,如將加載的數(shù)據(jù)添加到ListView中。
無論是使用AsyncTask還是線程池,都需要在加載數(shù)據(jù)的過程中更新UI界面。