我的Google Play控制台偶尔会出现我的游戏崩溃报告,我发现很难修复。这是相对罕见的,但它是迄今为止一些一星评价的原因。
这个代码运行良好的数千次,它很少会导致致命的错误(它在启动时会立即为用户崩溃)。它没有告诉我throwIfCannotDraw跳出来的原因。
任何帮助都非常感谢!
编辑:我认为这可能是一个时间问题,因为它是在启动时,其他线程正在加载 - 加载/初始化广告网络,分析,Google Play服务等。任何人都有这方面的经验吗?
java.lang.RuntimeException:
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1301)
at android.graphics.Canvas.drawBitmap(Canvas.java:1356)
以下是导致崩溃的前几个设备:
Galaxy Tab Pro 12.2 (v2wifi) 6 14.0%
Galaxy Tab Pro 10.1 (picassowifi) 5 11.6%
Galaxy Tap Pro 8.4 (mondrianwifi) 4 9.3%
Galaxy Note 10.1 (lt033g) 3 7.0%
Galaxy TabS 8.4 (klimtwifi) 3 7.0%
Galaxy S7 Edge (hero2lte) 3 7.0%
Zmax Pro (urd) 2 4.7%
Galaxy Note5 (noblelte) 2 4.7%
Android版本似乎不是原因:
Android 5.1 14 32.6%
Android 7.0 12 27.9%
Android 4.4 7 16.3%
Android 6.0 6 14.0%
代码:
bitmapTMP1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.map_charset);
bitmapTMP2 = Bitmap.createScaledBitmap(bitmapTMP1,
(int) (MAP_CHARSET_SX * scaleFactor),
(int) (MAP_CHARSET_SY * scaleFactor),
false);
bitmapTMP1.recycle();
bitmapMapCharset = Bitmap.createBitmap( bitmapTMP2.getWidth(), bitmapTMP2.getHeight(), Bitmap.Config.RGB_565 );
Canvas c = new Canvas();
c.setBitmap(bitmapMapCharset);
c.drawBitmap(bitmapTMP2,0,0,null); //HERE - Causes RuntimeException sometimes
bitmapTMP2.recycle();
答案 0 :(得分:0)
找到它。问题是scaleFactor = 1(发生在非常大的平板电脑上)。即没有扩展,文档说:
如果指定的宽度和高度与当前宽度相同 和源位图的高度,返回源位图,没有 新位图已创建。
所以当我回收我认为的源位图时( bitmapTMP1.recycle();),我实际上正在回收我继续使用的位图。
不确定为什么Logcat RuntimeException不包含“尝试使用循环位图”。这会有所帮助......