Android - TransactionTooLargeException: data parcel size bytes

Android - TransactionTooLargeException: data parcel size bytes

Při vývoji aplikací v Android studiu se můžeme setkat s chybou java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size bytes.

Problém vzniká kvůli přetečení maximální velikosti Bundle - Binder transaction, která přesáhne 1MB.

Celá chyba

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: cz.up4.polymorph_crud, PID: 20172
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 928068 bytes
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3950)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: android.os.TransactionTooLargeException: data parcel size 928068 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:764)
        at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4623)
        at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3934)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

 

Řešení

Já se podělím o poněkud primitivní řešení tohoto problému - rozdhodl jsem se jen pro promazávání ARG_RESPONSE v Bundle poté co ji načtu do proměnné a dále s ní nepotřebuji pracovat:

bundle.putString(ARG_RESPONSE, "");

A celý probém se tím vyřešil :-)

 

Takže to pak vypadá třeba takto:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
responseData = bundle.getString(ARG_RESPONSE);

// reset to fix error:
// TransactionTooLargeException: data parcel size 928124 bytes
bundle.putString(ARG_RESPONSE, "");
}

 

 

Jak se ti článek líbil?

Komentáře (0)

Přidat komentář