我的应用在尝试显示位图时出现以下异常:
java.lang.RuntimeException: Could not write bitmap to parcel blob.
at android.graphics.Bitmap.nativeWriteToParcel(Native Method)
at android.graphics.Bitmap.writeToParcel(Bitmap.java:1296)
at android.widget.RemoteViews$BitmapCache.writeBitmapsToParcel(RemoteViews.java:839)
at android.widget.RemoteViews.writeToParcel(RemoteViews.java:2347)
at com.android.internal.appwidget.IAppWidgetService$Stub$Proxy.updateAppWidgetIds(IAppWidgetService.java:521)
at android.appwidget.AppWidgetManager.updateAppWidget(AppWidgetManager.java:364)
at android.appwidget.AppWidgetManager.updateAppWidget(AppWidgetManager.java:431)
您知道为什么会出现此错误吗?它仅存在于 4.2。 我不知道为什么以及何时发生,我只在报告中得到这些异常。
谢谢, 塔玛斯
最佳答案
我想我找到了答案。如果我检查 jni/android/graphics/Bitmap.cpp 那么我可以看到:
size_t size = bitmap->getSize();
android::Parcel::WritableBlob blob;
android::status_t status = p->writeBlob(size, &blob);
if (status) {
doThrowRE(env, "Could not write bitmap to parcel blob.");
return false;
}
看来问题出在位图大小而不是位图本身。
如果无法分配内存,writeBlob 函数可以返回 NO_MEMORY 状态。
所以我想如果用户设置了太大的位图,那么它可能会以这种方式失败。
关于android - 无法在 Android 4.2 的 appwidget 中将位图写入 parcel blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701074/