3

我的应用程序在尝试显示位图时出现以下异常:

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 开始存在。我不知道为什么以及何时发生,我只在报告中得到了这些例外。

谢谢, 塔马斯

4

1 回答 1

2

我想我已经找到了答案。如果我检查 jni/android/graphics/Bitmap.cpp 那么我可以看到:

size_t 大小 = 位图->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 状态。

所以我猜如果用户设置了一个太大的位图,那么它可能会以这种方式失败。

于 2012-12-05T08:34:54.280 回答