我有一个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