我有一個通過重新設置列表視圖的適配器來刷新列表視圖的方法。設置時,適配器會爲每個列表項目下載縮略圖。Android:異步在一個單獨的線程中運行一個方法
我想在一個新的線程運行該方法被稱爲refreshListView(),使圖像得到異步下載,但我知道,我不能更新一個單獨的線程的用戶界面。
有什麼替代方法可以做到這一點?
在此先感謝。
我有一個通過重新設置列表視圖的適配器來刷新列表視圖的方法。設置時,適配器會爲每個列表項目下載縮略圖。Android:異步在一個單獨的線程中運行一個方法
我想在一個新的線程運行該方法被稱爲refreshListView(),使圖像得到異步下載,但我知道,我不能更新一個單獨的線程的用戶界面。
有什麼替代方法可以做到這一點?
在此先感謝。
你可以使用的AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)或裝載機(http://developer.android.com/guide/topics/fundamentals/loaders.html)。我建議使用加載程序,因爲它似乎總是更容易。這兩者都是針對這種類型的問題而設計的。
爲了使用上的任何目標平臺的裝載機小於3.0,請參考http://developer.android.com/sdk/compatibility-library.html。
的AsyncTask也適用於協調後臺作業與UI元素的更新:
http://developer.android.com/reference/android/os/AsyncTask.html
嗯。如果我理解正確,在圖像下載完成之前,您不想使用新的適配器?適配器中的圖像下載代碼。根據不同的情況,一旦適配器的視圖被加載/顯示,您可能只能看到下載代碼。
我通常首先在後臺線程中下載圖像,並將它們緩存在(SoftReferences的)集合中。然後,我在加載時從該集合中讀取適配器。
正如前面提到的,你可以使用的AsyncTask運行在另一個線程,一旦單獨的線程下載了縮略圖可以更新UI。根據您想要如何實現它,您還可以使用AsyncTask中的onProgressUpdate()方法下載縮略圖。否則使用onPostExecute來重置列表適配器。
這是整個代碼。
http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview/559781#559781
我通過將清單中的targetSDKVersion設置爲「2」得到了它的工作,上面的代碼似乎將圖像加載到一個隊列中。這是加載圖像的最佳方式嗎?如果不將targetSDKversion設置爲2,則只顯示佔位符圖像,圖像似乎不會被下載 – EI756
裝載機是3.0+只有,因此它們在當前可用的電話上不可用。 –
@PeterKnego不正確。 Android兼容性包讓每個人都能以一種非常簡單的方式訪問加載器:http://developer.android.com/sdk/compatibility-library.html –
啊,很好。謝謝(你的)信息。 +1先回答。 –