如何处理大量的drawables

时间:2011-12-07 22:07:30

标签: android drawable

我正在开发一款游戏,我使用了很多可绘制的游戏。 “可绘制”目录保存超过10MB内存(约900个可绘制内容)。在每个游戏关卡的开始时,我只加载了必需的drawables数组,所以当我绘制它们时,我只提到某些drawables。这将我的drawable数量减少到大约300,但在某些情况下,当时甚至可以使用900个drawable。即使我在使用可绘制的内容时,也会使用超过40 - 50MB的内存。我试图在比赛期间加载它们,但这没用,因为游戏速度令人难以置信。

确定。我忘记添加一些代码:P我的游戏基于LunarLancher,所以代码对你来说并不新鲜。

class  GraphicView extends SurfaceView implements SurfaceHolder.Callback
{   
  class GraphicThread extends Thread
  {
    public GraphicThread(SurfaceHolder surfaceHolder, Context context, Handlerhandler )
    {
      ...
      LoadPixmap(context);
      ...
    } 

    private void doDraw(Canvas canvas) 
    {
      m_Pixmap[iIndex].setBounds( m_iX, m_iY, m_iX + WIDTH_I, m_iY + HEIGHT_I );
      m_Pixmap[iIndex].draw( canvas );
    }
  }

  private void LoadPixmap(  Context context  )
  { 
    int iID = 0;
    Resources res = context.getResources();

    for( int iIndex=0; iIndex< m_Objects.size(); ++iIndex )
    {
      if ( IsPixmapNeeded(m_Objects[iIndex]) )
      {
        continue;
      }

      iID = res.getIdentifier("pixmap"+i, "drawable", "com.my.package");
      if ( iID != 0 )
      {
        m_Pixmap[iIndex] = context.getResources().getDrawable(iID);
        m_Pixmap[iIndex] = new ScaleDrawable( m_Pixmap[iIndex], 0, WIDTH_I, HEIGHT_I).getDrawable();
      }
    }
    res = null;
    context = null;
  }

   m_Pixmap[]   =  new Drawable[ FRAMES ];
}

此代码只是我现在编写的一个示例,但我的想法是一样的。

这个

LoadPixmap(context);
当我更新所有变量时也会调用

方法,所以我有机会添加/删除一些我需要使用的drawable。

和这部分代码

if ( IsPixmapNeeded(m_Objects[iIndex]) )

阻止我加载m_Pixmap数组中的drawables。

我的问题是,处理大量抽奖的正确方法是什么?我的问题不是我的代码问题,我宁愿找到一些更好的方法来处理大量的drawables。

1 个答案:

答案 0 :(得分:0)

您是否正在使用位图工厂将这些位图加载到任何位置?

如果是的话,

确保考虑到BitMap.recycle();

此外,请确保每部手机都有足够的VM预算来为这些图像分配内存。

如果你没有使用bitmapfactory,那就是kk。