2014-01-17 8 views
5

Ich arbeite an einer ziemlich einfachen Anwendung. Die App hat das folgende Stück Code unter der Haube:"Bitmap-Größe überschreitet 32 ​​Bit" bei BuildDrawingCache auf KitKat-Geräten

... 
mRootContentView = getWindow().getDecorView().findViewById(android.R.id.content)); 
int[] screenDimensions = AndroidUtils.getScreenDimesions(getContext()); 
bitmap = Bitmap.createBitmap(screenDimensions[0], screenDimensions[1], Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(bitmap); 
mRootContentView.layout(0, 0, screenDimensions[0], screenDimensions[1]); 
mRootContentView.draw(c); 
... 

Wie Sie haben Zweifel bereits erraten haben, wird es einen „Screenshot“ der ganzen aktuellen Aktivität.

Nach dem Android v 4.4.2 (KitKat) realease ich mit einer seltsamen Ausnahme in meiner ACRA konfrontiert habe berichtet, sagen Sie mir diese:

java.lang.IllegalArgumentException: bitmap size exceeds 32bits 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:809) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:769) 
at android.view.View.buildDrawingCache(View.java:13608) 
at android.view.View.draw(View.java:14154) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3103) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940) 
at net.simonvt.menudrawer.MenuDrawer.dispatchDraw(MenuDrawer.java:665) 
at android.view.View.draw(View.java:14468) 
at android.view.View.draw(View.java:14350) 
at android.view.ViewGroup.drawChild(ViewGroup.java:3103) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940) 
at android.view.View.draw(View.java:14468) 
at android.widget.FrameLayout.draw(FrameLayout.java:472) 
. . . 

Diese Ausnahme nur auf einem KitKat Geräten geworfen wird, so als Nexus 7 und Nexus 5.

EDIT

ich habe dies auch versucht:

mRootContentView.setDrawingCacheEnabled(true); 
mRootContentView.buildDrawingCache(); 
bitmap = mRootContentView.getDrawingCache(); 

Nichts hat sich geändert.

+1

So sollte vor dem Layout messen –

Antwort

0

Sieht so aus, als ob Ihre Ausnahme von GraphicsJNI::allocateJavaPixelRef ausgelöst wird. Die Ausnahme wird, wie Sie vielleicht vermutet haben, ausgelöst, wenn die Größe der Bitmap insgesamt 32 Bit überschreitet.

Da Sie nur einen "screenshot" erhalten, der wahrscheinlich keinen Alpha-Kanal erfordert, haben Sie darüber nachgedacht, Bitmap.Config.RGB565 statt RGBA8888 auszuprobieren? Ich bin mir nicht sicher, ob das alle Abstürze verhindert.

Verwandte Themen