我有一個AsyncTask
,它獲取一個URL作爲參數,並在完成時返回來自該URL的圖像的Bitmap
。當我開始活動時,我想顯示文本(而不是圖片),顯示「加載...」,在後臺運行ImageFetcher
,完成後,將圖像設置爲ImageView
。加載圖像並在加載完成時進行設置
的問題是,如果我運行:
ivPoster.setImageBitmap(imgFetcher.execute(m.getPosterUrl()).get());
,直到圖像加載它不會加載整個活動。它跳過幀。
所以我在任務上設置一個上完成監聽器,返回的位圖,並試圖設置圖像的位圖檢索後:
imgFetcher.setOnFinishListener(new OnTaskFinished() {
@Override
public void onFinish(Bitmap bm) {
// hide the loading image text
tvLoading.setVisibility(View.INVISIBLE);
// place the image
ivPoster.setImageBitmap(bm);
}
});
imgFetcher.execute(m.getPosterUrl());
然而,它仍然會跳幀和「做太多的工作在主線程上'。
如何防止跳幀?
請看看第二個代碼。在那裏它不會調用'get()',而是用數據調用'onFinish'。 – Gofilord 2015-02-07 18:44:45