利用多執行緒提高程式效能(for Android)

2021-06-06 01:46:22 字數 1589 閱讀 9936

}首先我們建立了乙個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張以便更好地演示可能出現的問題。

進一步的工作

來自: 

提高程式效能 何為快取 從儲存器結構說起

開篇 中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記...

提高程式效能 何為快取 從儲存器結構說起

中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記憶體 ...

提高程式效能 何為快取 從儲存器結構說起

開篇 中對程式區域性性有了乙個簡單的介紹。基本上已經知道了如何編寫有良好區域性性的 但是為什麼有良好區域性性的 就能有良好的執行效率,這個問題將在這篇博文中給出解答。至於儲存器內部的組織實現,將在下篇文章中敘述。儲存器層次結構 我們知道,計算機裡的儲存器有 硬碟 主存 快取記憶體 其中又有一級快取記...