2

大家!

我根据我的应用程序中的一些数据绘制了一个图。该图具有滚动和缩放功能。为此,我在 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 之类的)?

非常感谢。

4

1 回答 1

1

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

于 2012-06-23T01:24:28.090 回答