我有一个TransactionTooLargeException. 不可重现。在文档中它说
TransactionTooLargeException
Binder 事务因太大而失败。 在远程过程调用期间,调用的参数和返回值作为存储在 Binder 事务缓冲区中的 Parcel 对象进行传输。如果参数或返回值太大而无法放入事务缓冲区,则调用将失败并抛出 TransactionTooLargeException。 … 当远程过程调用引发 TransactionTooLargeException 时,有两种可能的结果。客户端无法将其请求发送到服务(很可能是因为参数太大而无法放入事务缓冲区),或者服务无法将其响应发送回客户端(很可能如果返回值是太大而无法放入事务缓冲区)。 …
Binder 事务因太大而失败。
在远程过程调用期间,调用的参数和返回值作为存储在 Binder 事务缓冲区中的 Parcel 对象进行传输。如果参数或返回值太大而无法放入事务缓冲区,则调用将失败并抛出 TransactionTooLargeException。
…
当远程过程调用引发 TransactionTooLargeException 时,有两种可能的结果。客户端无法将其请求发送到服务(很可能是因为参数太大而无法放入事务缓冲区),或者服务无法将其响应发送回客户端(很可能如果返回值是太大而无法放入事务缓冲区)。
所以我在某个地方传递或接收超过某个未知限制的参数。在哪里?
堆栈跟踪没有显示任何有用的信息:
java.lang.RuntimeException: Adding window failed at android.view.ViewRootImpl.setView(ViewRootImpl.java:548) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:406) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:320) at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:152) at android.view.Window$LocalWindowManager.addView(Window.java:557) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2897) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$600(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:4977) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method) Caused by: android.os.TransactionTooLargeException at android.os.BinderProxy.transact(Native Method) at android.view.IWindowSession$Stub$Proxy.add(IWindowSession.java:569) at android.view.ViewRootImpl.setView(ViewRootImpl.java:538) ... 16 more android.os.TransactionTooLargeException at android.os.BinderProxy.transact(Native Method) at android.view.IWindowSession$Stub$Proxy.add(IWindowSession.java:569) at android.view.ViewRootImpl.setView(ViewRootImpl.java:538) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:406) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:320) at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:152) at android.view.Window$LocalWindowManager.addView(Window.java:557) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2897) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$600(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:4977) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) at dalvik.system.NativeStart.main(Native Method)
好像和观点有关?这与远程过程调用有何关系?
也许很重要:Android 版本:4.0.3,设备:HTC One X
我遇到了这个问题,我发现当服务和应用程序之间交换大量数据时(这涉及传输大量缩略图)。实际数据大小约为 500kb,IPC 事务缓冲区大小设置为 1024KB。我不确定为什么它超出了事务缓冲区。
当您通过 Intent Extras 传递大量数据时,也会发生这种情况
当您在应用程序中遇到此异常时,请分析您的代码。
遇到此异常时如何处理
如果可能,将大操作拆分为小块,例如,不要使用 1000 个操作调用 applyBatch(),而是每个调用 100 个。
不要在服务和应用程序之间交换大量数据 (>1MB)
我不知道该怎么做,但是,不要查询 android,它会返回大量数据 :-)