异步将大型Bitmap加载到ImageView中

时间:2015-08-31 16:33:24

标签: android

这个问题长期困扰我。

我有一个资源R.drawable.photo = ~5兆字节

我有一个代码:

private Bitmap mPhoto;

public void loadAndShow() {
    // default options
    mPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.photo, options);
    ImageView photo = findViewById(R.id.photo);
    photo.setImageBitmap(mPhoto);
}

每次我试图展示我的绘图时,都需要很长时间。

我究竟在问什么?

如何在不损失性能的情况下异步加载大位图到视图中?
在UI中没有任何滞后?

  

注意:请不要提供与某些第三方库(Picasso,UniversalImageLoader等)相关的答案。

1 个答案:

答案 0 :(得分:0)

解决方案是将图像加载到另一个线程中,并在加载后将其设置为主线程上的ImageView。

这段代码可以解决问题:

new AsyncTask<Void, Void, Bitmap>() {
    @Override
    protected Bitmap doInBackground(Void... params) {
        return BitmapFactory.decodeResource(getResources(), R.drawable.photo, options);
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        ((ImageView)findViewById(R.id.photo)).setImageBitmap(bitmap);
    }
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);