这个问题长期困扰我。
我有一个资源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等)相关的答案。
答案 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);