【发布时间】:2017-09-13 22:54:37
【问题描述】:
我开发了一款在 Android 版本低于 Nougat 的设备上运行良好的应用。
当我在带有 Nougat 的设备上启动应用程序并按下主页按钮时,应用程序崩溃并且在 logcat 中我有:
!!! FAILED BINDER TRANSACTION !!! (parcel size = 1819712)
Unhandled exception
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1819712 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3781)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.os.TransactionTooLargeException: data parcel size 1819712 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:615)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3636)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3773)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
有简单的解决方案吗?此问题仅出现在 Nougat 上。
【问题讨论】:
-
这意味着你在
onSaveInstanceState()的Bundle中写入了太多数据。 -
不,我没有传递位图。案例是为什么应用程序在 android 7.0/7.1 上无法正常运行,但在较低版本上一切正常。
-
嗯,崩溃表明您正在向这个包裹写入
1819712字节。这在任何版本的 Android 上都会失败。无论出于何种原因,您的数据量都大幅增长。由于我们看不到您的代码,因此我们无法真正告诉您它是如何或为何如此增长的。 -
我正在寻找它在较低版本上工作的原因。找到后我会发布解决方案。
-
@nuka_cola 在早于 Nougat 的版本上这不是问题的原因是这曾经是一个无声的失败。它只是升级为牛轧糖的崩溃。 Nougat behavior changes 讨论了这一点:“系统现在将 TransactionTooLargeExceptions 重新抛出为 RuntimeExceptions,而不是静默记录或抑制它们。一个常见的例子是在 Activity.onSaveInstanceState() 中存储了太多数据,这会导致 ActivityThread.StopInfo 在您的应用面向 Android 7.0。”
标签: android android-7.0-nougat parcel android-7.1-nougat