2012-12-04 4 views
3

내 애플있어 비트 맵을 표시하려고 다음과 같은 예외 :안드로이드에 appwidget에서 소포 BLOB에 비트 맵을 쓸 수 없습니다 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 상태를 반환 할 수 있습니다.

사용자가 너무 큰 비트 맵을 설정하면이 방법은 실패 할 수 있습니다.

관련 문제