2012-12-04 40 views
3

我的應用程序有試圖顯示位圖時,下列情況除外:無法在Android的寫位圖包裹二進制大對象appwidget 4.2

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開始存在。 我不知道爲什麼,什麼時候發生,我只在報告中得到這些例外。

感謝, 塔馬斯

回答

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狀態。

所以我想如果用戶設置一個太大的位圖,那麼它可能會以這種方式失敗。