Intereting Posts
Получить статус подписки на Android, не удалось с 403 Высота не работает для BottomSheet внутри расположения координатора Откройте приложение LinkedIn (страница профиля контакта) из моего приложения Android с использованием намерения? Невозможно установить NuGet-пакеты (проект Xamarin Android) Что мне делать: для этого требуется андроид.permission.INTERACT_ACROSS_USERS_FULL Как использовать SSL с несколькими сущностями в android Как добавить дополнение к градиенту <shape> в Android? Получить токен Google Access после аутентификации с использованием Firebase Authentication Макет как паук Добавление Renderscript в Android studio 1.0.1 с API @ 21 и SDKTools @ 21.1.2 вызывает ошибки сборки SLF4J varargs интерпретирует первую строку как маркер Android GPS ACCURACY_HIGH вызывает принудительное закрытие? Как достичь наилучшей производительности с помощью SQLite в Android? Полноэкранный режим DialogFragment показывает отступ по бокам Android: Управление Гладкая прокрутка по просмотру ресайклеров

«Размер растрового изображения превышает 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 ? Однако я не уверен, что это предотвратит все сбои.