2013-07-04 4 views
0

У меня есть memoryleak в моем приложении, которое я получил в классе AsyncTask и в методе onPostExecute. Метод onPostExcecute получает 9 уменьшенных растровых изображений и помещает их в scrollview. Скроллвью в свою очередь помещается в alertdialog.memoryleak в asynctask несмотря на использование weakreference

Любые предложения, как остановить эту утечку памяти? Я попытался сделать слабую оценку всех 9 растровых изображений без успеха.

Есть ли альтернатива?

protected void onPostExecute(Bitmap[] bitmap) { 

if (view == null) { 
    view = factory.inflate(R.layout.alertviews4, null); 
    alertadd = new AlertDialog.Builder(context); 
} 



WeakReference <Bitmap> weakBitmap0 = new WeakReference <Bitmap> (bitmap[0]); 
WeakReference <Bitmap> weakBitmap1 = new WeakReference <Bitmap> (bitmap[1]); 
WeakReference <Bitmap> weakBitmap2 = new WeakReference <Bitmap> (bitmap[2]); 
WeakReference <Bitmap> weakBitmap3 = new WeakReference <Bitmap> (bitmap[3]); 
WeakReference <Bitmap> weakBitmap4 = new WeakReference <Bitmap> (bitmap[4]); 
WeakReference <Bitmap> weakBitmap5 = new WeakReference <Bitmap> (bitmap[5]); 
WeakReference <Bitmap> weakBitmap6 = new WeakReference <Bitmap> (bitmap[6]); 
WeakReference <Bitmap> weakBitmap7 = new WeakReference <Bitmap> (bitmap[7]); 
WeakReference <Bitmap> weakBitmap8 = new WeakReference <Bitmap> (bitmap[8]); 

mImage = (ImageView) view.findViewById(R.id.img1); 
mImage.setImageBitmap(weakBitmap0.get()); 
mImage = (ImageView) view.findViewById(R.id.img2); 
mImage.setImageBitmap(weakBitmap1.get()); 
mImage = (ImageView) view.findViewById(R.id.img3); 
mImage.setImageBitmap(weakBitmap2.get()); 
mImage = (ImageView) view.findViewById(R.id.img4); 
mImage.setImageBitmap(weakBitmap3.get()); 
mImage = (ImageView) view.findViewById(R.id.img5); 
mImage.setImageBitmap(weakBitmap4.get()); 
mImage = (ImageView) view.findViewById(R.id.img6); 
mImage.setImageBitmap(weakBitmap5.get()); 
mImage = (ImageView) view.findViewById(R.id.img7); 
mImage.setImageBitmap(weakBitmap6.get()); 
mImage = (ImageView) view.findViewById(R.id.img8); 
mImage.setImageBitmap(weakBitmap7.get()); 
mImage = (ImageView) view.findViewById(R.id.img9); 
mImage.setImageBitmap(weakBitmap8.get()); 

alertadd.setView(view); 

alertadd.setNeutralButton("Here!", new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface dlg, int sumthin) { 

    } 
}); 
alertadd.show(); 

}

ответ

0

Для уровня API < 11, растровые изображения трудная тема. Они подсчитываются до предела кучи приложения, но не просто собираются GC. Лучшей практикой было бы вызвать bitmap.recycle() и свернуть указатель, чтобы позволить GC собирать ссылку.

+0

Я не могу переработать локальную переменную растрового изображения в методе onPostExcecute, поскольку она используется как ресурс. Какие-либо предложения? –

Смежные вопросы