2014-02-14 44 views
11

我從我住的應用程序之一看到相當多的錯誤報道,是造成此異常:android.os.TransactionTooLargeException拋出隨機

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) 

從我讀過here,我相信原因可能會下降到過大Parcelable我正在添加到Intent演員。我目前正在將一個對象從一個活動傳遞給另一個活動,在該對象writeToParcel方法我保存一個JSON字符串,其大小範圍從1000 - 1500個字符的長度。這可能是原因嗎?

在測試應用程序時,我有時會注意到UI滯後,好像內存不足,凍結然後強制關閉。

使用靜態變量將對象從一個Activity傳遞到另一個會更好還是完全可以由其他引起?

感謝

回答

3

是的,這可以很好地通過一個過大Parcelable,過大的對象圖由請求作爲Parcelable要準確。根據我的經驗,如果您傳輸大型圖形,最好使用java序列化,這與您在SO和其他地方獲得的建議幾乎相反。公平地說,它比通過Parceler lib使用Parcelable更好,我從未使用過純Parcelable。有關此主題的更多詳細信息,請參閱my blog post

1

根據What to do on TransactionTooLargeException

可能出現這種情況,當你經過意圖演員

如果可能的話傳遞大量的數據,在以小塊分割的大操作,例如,而不是調用applyBatch()與1000次操作,每次調用100次。

不交換服務和應用

的1Mb之間巨大的數據(> 1MB)根據http://developer.android.com/reference/android/os/TransactionTooLargeException.html

+1

我覺得極限是1Mb –

+0

@Arash -Oh! - 我想你說得對 - 根據這個來源:http://developer.android.com/reference/android/os/TransactionTooLargeException.html – Saeid

+0

好的答案,但下次引用你複製1:1的文本。 – JacksOnF1re

1

你重寫

onSaveInstanceState() 

,如果你做檢查要保存什麼也可能有錯誤。 如果你這樣做

outState.putParcelable("key", outState); //Error is passing the bundle 
相關問題