2014-02-14 8 views
11

geworfen ich schon einige Fehler berichtet von einem meiner Live-Anwendungen sehe, ist die verursacht diese Ausnahme:android.os.TransactionTooLargeException zufällig

java.lang.RuntimeException: Adding window failed 
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:513) 
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) 
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(NativeStart.java) 

Caused by: android.os.TransactionTooLargeException 
    at android.os.BinderProxy.transact(Binder.java) 
    at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683) 
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:502) 
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) 
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(NativeStart.java) 

Von dem, was ich here gelesen habe, glaube ich, die Ursache kann bis zu einem zu großen Parcelable Ich bin zu einem Intent Extras hinzufügen. Ich übergebe gerade ein Objekt von einer Aktivität an eine andere, in der Objects writeToParcel Methode Ich speichere eine JSON-Zeichenfolge, die in der Größe von 1000 bis 1500 Zeichen Länge reicht. Könnte das die Ursache sein?

Während ich die App teste, merke ich manchmal, dass die UI zurückbleibt, als ob sie wenig Speicher hat, friert ein und schließt dann.

Wäre es besser, das Objekt mit statischen Variablen von einer Aktivität zur anderen zu übergeben, oder könnte dies durch etwas anderes verursacht werden?

Dank

Antwort

3

Ja, das sehr gut kann durch eine zu große Parcel zu große Objektdiagramm gesendet werden sollte als Parcel um genau zu sein verursacht werden. Meiner Erfahrung nach ist es besser, die Java-Serialisierung zu verwenden, wenn Sie ein großes Diagramm übertragen, und das ist ziemlich genau das Gegenteil von dem, was Sie anderswo auf SO und im Allgemeinen erhalten. Um fair zu sein, ist es besser als Parcelable über Parceler lib zu verwenden, ich habe nie reines Parcelable verwendet. Weitere Informationen finden Sie unter my blog post zu diesem Thema.

1

nach What to do on TransactionTooLargeException:

Dies kann auftreten, wenn Sie viele Daten durch Absicht Extras passieren

Wenn möglich, teilen die große Operation in zu kleinen Stücken, beispielsweise anstelle applyBatch des Aufrufs() mit 1000 Operationen, rufe sie mit jeweils 100 an.

Sie keine umfangreichen Daten (> 1 MB) zwischen den Diensten und Anwendungen auszutauschen

1MB Nach http://developer.android.com/reference/android/os/TransactionTooLargeException.html

+1

tun Ich denke, die Grenze 1MB –

+0

@Arash -Ach ist! - Ich glaube, Sie sagte rechts - nach dieser Quelle: http://developer.android.com/reference/android/os/TransactionTooLargeException.html – Saeid

+0

Gute Antwort, aber das nächste Mal Zitat der Text, den Sie 1 zu kopieren: 1. – JacksOnF1re

1

Sie

onSaveInstanceState() 

außer Kraft setzen Sie, wenn Sie überprüfen, was Sie sparen Es könnte auch ein Fehler sein. Wie, wenn Sie

outState.putParcelable("key", outState); //Error is passing the bundle