<分区>
Possible Duplicate:
OutOfMemory Exception when handling images
我在 AsyncTask 中创建了一个位图,它是这样的:
private WeakReference<Bitmap> myBitmap;
private WeakReference<Bitmap> endResultBitmap;
private ImageView imv;
...
private class SendBitmap extends AsyncTask<Integer, Void, Bitmap> {
public SendBitmap(Bitmap bitmap) {
myBitmap = new WeakReference<Bitmap>(bitmap);
}
@Override
protected Bitmap doInBackground(Integer... params) {
Bitmap bm = null;
bm = getBitmapFromNet(params[0]);
return bm;
}
然后我想创建接收到的位图会出现两次的位图(一个接一个)
protected void onPostExecute(Bitmap result) {
endResultBitmap = new WeakReference<Bitmap>(Bitmap.createBitmap(result.getWidth() * 2, result.getHeight(), result.getConf()));
Canvas canvas = new Canvas(endResultBitmap.get());
canvas.drawBitmap(result, 0, 0, null);
canvas.drawBitmap(result, result.getWidth(), 0, null);
imv.setImageBitmap(endResultBitmap);
}
然后我有我的 onCancelled() 方法:
@Override
protected void onCancelled(Bitmap result) {
if(endResultBitmap!=null) {
endResultBitmap.recycle();
endResultBitmap = null;
}
}
问题是,如果我多次执行此 AsyncTask,堆就会疯狂增长。 我在按下按钮时执行 AsyncTask,但起初我这样做:
public void onClicked(View v) {
if(asyncTaskInstance != null)
asyncTaskInstance.cancel();
asynctaskInstance.execute(2);
}
但是,堆再次疯狂增长,在某个时候它会因 OutOfMemoryError 而崩溃。
有什么想法吗?我的任务设计有问题吗?