无法在Android 4.2中的appwidget中将位图写入parcel blob

时间:2012-12-04 10:42:04

标签: android bitmap android-4.2-jelly-bean

我的应用在尝试显示位图时遇到以下异常:

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

谢谢, 的Tamas

1 个答案:

答案 0 :(得分: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状态。

所以我想如果用户设置的位图太大,那么就会失败。