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 に答える