Итак, я использую пользовательские номерные плитки для изображений. Изображения хранятся в виде ресурсов. Я отслеживал утечку памяти, и у меня есть основания полагать, что метод хранения этих изображений для использования является подозрительным. В настоящее время я делаю это:
private void loadImageList()
{
Log.d(TAG,"Reloading List "+imageList);
if (imageList==null || imageList.size()<10)
{
imageList=new ArrayList<Bitmap>(10);
imageList.add(0,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number0));
imageList.add(1,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number1));
imageList.add(2,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number2));
imageList.add(3,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number3));
imageList.add(4,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number4));
imageList.add(5,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number5));
imageList.add(6,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number6));
imageList.add(7,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number7));
imageList.add(8,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number8));
imageList.add(9,BitmapFactory.decodeResource(getResources(), R.drawable.ant_number9));
}
}
public void onStart()
{
super.onStart();
loadImageList();
}
Что произойдет, если я несколько раз открою и закрою это приложение, тогда системе не хватит памяти, чтобы добавить изображение в ImageList
. Я устанавливаю изображение кнопки следующим образом (но с объектом ImageButton, конечно). Я должен добавить, что приложение является многопоточным, и этот вызов находится в runOnUiThread(Runnable)
ImageButton.setImageBitmap(imageList.get(current_var));
Я пытался удалить изображения в команде onStop()
, но иногда это вызывает сбой, когда поток пытается выделить изображение, сохраненное в памяти, кнопке из-за многопоточной природы зверя.
Итак, есть ли лучший способ загрузить эти изображения, которые не вызовут утечку памяти?