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

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

谢谢, 塔玛斯

最佳答案

我想我找到了答案。如果我检查 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/

相关文章:

android - 抽屉中的 SwipeRefreshLayout 手势检测

android - HTC WildFire 上的 SharedPreferences EditText 对话框被挤压

android - 制作跨平台 RTMP 流媒体/播放应用程序的正确方法。 Phonegap livu插件?

c++ - c++ 中的硬编码位图会产生倾斜的线条

带有自定义内容的 Android 默认样式通知

android - 在 android 4.2.2+ 上覆盖状态栏

android - 可扩展 ListView : Distinct View Groups

java - 如何在 Android 应用程序中存储用于多个 Activity 的位图

android - 如何在 map 上显示之前缩放位图?

java - Android PackageManger.getLaunchIntentForPackage() 没有抛出记录的异常