Лучшая практика для хранения изображений для использования в краткосрочной перспективе - PullRequest
0 голосов
/ 11 марта 2012

Итак, я использую пользовательские номерные плитки для изображений. Изображения хранятся в виде ресурсов. Я отслеживал утечку памяти, и у меня есть основания полагать, что метод хранения этих изображений для использования является подозрительным. В настоящее время я делаю это:

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(), но иногда это вызывает сбой, когда поток пытается выделить изображение, сохраненное в памяти, кнопке из-за многопоточной природы зверя.

Итак, есть ли лучший способ загрузить эти изображения, которые не вызовут утечку памяти?

1 Ответ

0 голосов
/ 11 марта 2012

Я понял кое-что после публикации этого.Я мог бы просто сделать imageList статическим.Эти изображения не будут меняться от одного вида к другому.Растровые изображения не содержат представления, поэтому память не будет заблокирована.Я уже проверяю, существуют ли значения, прежде чем я их использую.И эта функция используется так часто, что удержание статической памяти не повредит другим аспектам программы.Иногда это просто помогает выразить это словами ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...