在Android 4.2中的appwidget中无法将位图写入包裹块。

4

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

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个回答

3
我认为我已经找到了答案。如果我查看 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状态。

因此,我猜测如果用户设置了太大的位图,则可能会以这种方式失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接