Android:在Samsung设备上添加窗口失败/ android.os.TransactionTooLargeException

时间:2014-10-15 15:07:06

标签: android exception

因为几个月我在我的应用程序中遇到大量异常,并显示错误消息:添加窗口失败(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)

3 个答案:

答案 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)