2017-06-27 4 views
0

私のゲームでGoogle Playコンソールからクラッシュレポートが出力されることがあり、修正が難しい場合があります。それは比較的まれですが、これまでに数少ない1つ星レビューの原因です。グラフィックスをRGB_565に変換する際のRuntimeException

このコードは何千回もうまく動作しますが、致命的なエラーが発生することはまれです(起動時にユーザーがすぐにクラッシュする)。 throwIfCannotDrawが出て行く理由はわかりません。

大変助かりました!

編集:開始時にタイミング問題が発生する可能性があり、広告ネットワーク、アナリティクス、Google Playサービスなどの読み込み/初期化など、他のスレッドで負荷がかかると思います。 Androidのバージョンが原因ではないよう

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 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(); 

java.lang.RuntimeException: 
     at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1301) 
     at android.graphics.Canvas.drawBitmap(Canvas.java:1356) 

はここでクラッシュを引き起こして上位のいくつかのデバイスです

答えて

0

見つけました。問題はscaleFactor = 1(非常に大きなタブレットで発生)です。私。スケーリング、およびドキュメントは言いません:

指定された幅と高さは現在の幅 とソースビットマップの高さと同じである場合は、ソースビットマップが返され、何の 新しいビットマップが作成されません。

私はソースビットマップ( bitmapTMP1.recycle();)だと思ったものを再利用する場合ので、私は実際に私が使用するようになったビットマップをリサイクルしました。

Logcat RuntimeExceptionに「リサイクルビットマップを使用しようとしています」が含まれていない理由がわかりません。それは役に立ちましたでしょう...

関連する問題