Проблема памяти изображений Android - PullRequest
1 голос
/ 31 октября 2011

В моей игре есть активность на уровне браузера. В этом упражнении у HorizontalScrollViewer отображается 25 уровней одновременно. Уровни представлены LevelBrowserButtons, которые являются пользовательскими компонентами. Каждый LevelBrowserButton представляет собой изображение уровня, и эти изображения не очень большие и никогда не превышают 35 КБ каждый.

Таким образом, с 25 кнопками он не должен использовать более 1 МБ для изображений, но даже при размере кучи виртуальной машины 24 я получаю «java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины».

Мой код ниже:

public class LevelBrowserButton extends LinearLayout 
{   
  int LayoutNumber = 1;


  public LevelBrowserButton(Context context, String layoutName, int layoutNumber) 
  {
    super(context);
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                                      
    inflater.inflate(R.layout.levelbrowser_button, this);

    LayoutNumber = layoutNumber;

    // Set Layout Name
    TextView nameTextView = (TextView) findViewById(R.id.NameTextView);
    nameTextView.setText(layoutNumber + ": " + layoutName);

    // Set Layout Image
    int imageResource = this.getResources().getIdentifier("levelbrowser_" + layoutNumber, "drawable", "mobile.firegame");
    ImageView backgroundImageView = (ImageView)findViewById(R.id.BoardImageView);
    backgroundImageView.setImageResource(imageResource);

    // Set Status Image
    ImageView statusImageView = (ImageView)findViewById(R.id.StatusImageView);
    if (Settings.getLevelStats(layoutName).Completed)
        statusImageView.setImageResource(R.drawable.levelbrowser_completed);
    else
        statusImageView.setImageResource(R.drawable.levelbrowser_uncompleted);
  }
}

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

1 Ответ

0 голосов
/ 21 апреля 2015

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

Исключение из памяти + анализ дампа файла hprof

...