因为几个月我在我的应用程序中遇到大量异常,并显示错误消息:添加窗口失败(android.os.TransactionTooLargeException)
我知道IPC缓冲区事务大小限制为1024KB,但我只是将id发送到我的服务(Long值)。 奇怪的是,这些例外只发生在安装了Android 4.4.2的三星设备上(每一次超过50K的崩溃)。 你知道最新三星ROM中的一个特定错误吗?
java.lang.RuntimeException: Adding window failed
at android.view.ViewRootImpl.setView(ViewRootImpl.java:738)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.widget.Toast$TN.handleShow(Toast.java:478)
at android.widget.Toast$TN$1.run(Toast.java:374)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5476)
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:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
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:710)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:727)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.widget.Toast$TN.handleShow(Toast.java:478)
at android.widget.Toast$TN$1.run(Toast.java:374)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5476)
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:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(NativeStart.java)
或
java.lang.RuntimeException: Adding window failed
at android.view.ViewRootImpl.setView(ViewRootImpl.java:726)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3038)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
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:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
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:710)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:715)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3038)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
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:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(NativeStart.java)
答案 0 :(得分:1)
请检查堆栈溢出时提供的答案here。
Durairaj Packirisamy 回答了相同的TransactionTooLarge错误问题,该问题如下所示。
Durairaj Packirisamy 说: -
我遇到了这个问题,我发现当服务和应用程序之间交换大量数据时(这涉及转移大量缩略图)。实际上数据大小约为500kb,IPC事务缓冲区大小设置为1024KB。我不确定为什么它超出了事务缓冲区。
当您通过intent extras传递大量数据时,也会发生这种情况
当您在应用程序中遇到此异常时,请分析您的代码。
您是在服务和应用程序之间交换大量数据吗? 使用意图来共享大量数据(例如,用户从图库共享新闻共享中选择大量文件,将使用意图传输所选文件的URI) 从服务接收位图文件 等待android用大量数据回复(例如,当用户安装了大量应用程序时,getInstalledApplications()) 使用applyBatch(),其中有许多操作待定 如何处理此异常时如何处理
如果可能的话,将大操作拆分为小块,例如,不要使用1000个操作调用applyBatch(),而是每个调用100个。
不要在服务和应用程序之间交换大量数据(> 1MB)
我不知道该怎么做,但是,不要查询android,它可以返回大量数据: - )
<强>我强>: - 最近我也遇到了这个问题。我的问题是我将视频从原始文件夹复制到SD卡,然后创建缩略图并在列表视图上显示之后。整个过程在单线程上执行,抛出了异常。我通过将视频从原始文件夹复制到SD卡的整个过程,创建缩略图并在列表上显示来解决了这个问题。这些所有操作都在3个不同的线程上执行,我的问题得到了解决。
如果有帮助,请告诉我。
答案 1 :(得分:0)
我在三星设备上也遇到了TransactionTooLargeException。 我在意图附加内容中传输了太大的html数据,但现在我通过减少大量数据来解决这个问题。
如果您的应用程序中出现 TransactionTooLargeException 异常,请检查您的代码。 避免使用额外的大量数据。
答案 2 :(得分:-1)