Android图像内存问题

时间:2011-10-31 11:52:13

标签: android memory-leaks out-of-memory

我的游戏中有一个Activity到浏览器级别。在此活动中,Horizo​​ntalScrollViewer一次显示25个级别。级别由LevelBrowserButtons表示,它们是自定义组件。每个LevelBrowserButton都是一个级别的图像,这些图像不是很大,每个都不超过35K。

因此,对于25个按钮,图像不应超过1MB,但即使VM堆大小为24,我也会得到“java.lang.OutOfMemoryError:位图大小超过VM预算”。

我的代码如下:

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);
  }
}

我已经阅读过相当多类型问题的人,但无法弄明白。这与正确处理Bitmaps无关,因为我甚至无法做到那么远。

1 个答案:

答案 0 :(得分:0)

这是一个类似的问题,我回答并展示了如何动态加载正确的图像大小。

内存不足异常+分析hprof文件转储