«Размер растрового изображения превышает 32 бит» в buildDrawingCache на устройствах KitKat

Я работаю над довольно простым приложением. Приложение имеет следующий код под капотом:

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

Как вы, несомненно, уже догадались, он получает «скриншот» всей текущей деятельности.

После андроида v 4.4.2 (KitKat) realease я столкнулся со странным исключением в своих отчетах ACRA, сказав мне следующее:

 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) . . . 

Это исключение распространяется только на устройства KitKat, такие как nexus 7 и nexus 5.

РЕДАКТИРОВАТЬ

Я также пробовал это:

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

Ничего не изменилось.

Похоже, что ваше исключение выбрасывается из GraphicsJNI :: allocateJavaPixelRef . Исключение выбрано, как вы могли догадаться, когда размер Bitmap превышает 32 бита.

Поскольку вы получаете только «скриншот», который, вероятно, не требует альфа-канала, подумали ли вы о попытке Bitmap.Config.RGB565 а не RGBA8888 ? Однако я не уверен, что это предотвратит все сбои.