}首先我們建立了乙個http客戶端和http請求。如果請求成功,就把響應中包含的內容解碼成位圖格式並返回,以備後續使用。另外補充一句,為了讓程式可以訪問網路,必須在程式的manifest檔案中宣告使用internet。
注意:舊版的bitmapfactory.decodestream有個bug,可能使得在網路較慢的時候無法正常工作。可以使用 flushedinputstream(inputstream)代替原始的inputstream來解決這個問題。下面是這個helper class的實現:
static class flushedinputstream extends filterinputstream
@override
public long skip(long n) throws ioexception else
}totalbytesskipped += bytesskipped;
}return totalbytesskipped;}}
這個類可以保證skip()確實跳過了引數提供的位元組數,直到流檔案的末尾。
正是因為這想都想得出來的糟糕體驗,androidhttpclient根本就不允許在主線程裡啟動!上面的**在主線程裡將會提示「本執行緒無法進行http請求」。如果你不見棺材不落淚,說啥也要親手試試這糟糕的使用者體驗的話,可以用defaulthttpclient代替 androidhttpclient,給自己乙個交代。
非同步任務
public void download(string url, imageview imageview)
}public bitmap**********task(imageview imageview)
@override
// actual download method, run in the task thread
protected bitmap doinbackground(string... params)
@override
// once the image is downloaded, associates it to the imageview
protected void onpostexecute(bitmap bitmap)
併發處理
public downloadeddrawable(bitmap**********task bitmap**********task)
demo
本文的源**可以從google code獲取。你可以在本文提到的三種實現方式(非非同步、無併發處理以及最終版本)中切換、比較。注意,快取大小已經被限制到10張以便更好地演示可能出現的問題。
進一步的工作
來自:
提高程式效能 何為快取 從儲存器結構說起
開篇 中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記...
提高程式效能 何為快取 從儲存器結構說起
中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記憶體 ...
提高程式效能 何為快取 從儲存器結構說起
開篇 中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記...