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