大家!

我根据应用程序中的一些数据绘制了一个图。该图具有滚动和缩放。为此,我在MyMainFragment.onActivityCreated()中创建了2个位图。

if (bitmaps[0] != null)
      {
         return;
      }

final int deviceWidth = getResources().getDisplayMetrics().widthPixels;
          final int deviceHeight = getResources().getDisplayMetrics().heightPixels;
          final int deviceMaxDim = Math.max(deviceHeight, deviceWidth);

          bitmaps[0] = Bitmap.createBitmap(
             deviceMaxDim * 2,
             deviceMaxDim * 1,
             Bitmap.Config.ARGB_8888);

          bitmaps[1] = Bitmap.createBitmap(
           bitmaps[0].getWidth(),
           bitmaps[0].getHeight(),
           bitmaps[0].getConfig());


由于需要使用绘制算法,因此我需要2个位图,而不仅需要1个位图。在Asus Transformer上运行该程序,其bmp大小(以像素为单位)为1280 * 2 * 1280,因此字节大小为1280 * 2 * 1280 *4。当我从Eclipse运行该程序时,一切都很好。但是,当我像平板电脑上的普通用户一样启动它时,它每秒钟崩溃一次。

当我从Eclipse启动我的应用程序以使其运行时,幕后发生了什么,我是否可以通过编程方式遵循相同的步骤,以使其在正常启动时不会崩溃?还是应该使用其他绘制算法(例如OpenGL)?

非常感谢。

最佳答案

解决方案很简单。我在代码中的某个地方创建了一个Canvas,在其上称为Canvas#setBitmap(bitmaps [?]),但没有意识到,必须调用Canvas.setBitmap(null)才能释放引用。

10-08 17:51