我正在创建一个应用程序,在那里我将Bundle
中的Service
非常大的数据发送到Activity
。但我没有使用Messenger
。相反,我将数据分配给单例类中的变量,然后我从该单例类中检索数据并将其分配给活动。
在Activity
中,我有一个ViewPager
,其中有两个片段被充气。 Bundle
被发送到这两个Fragment
类。
现在,当活动暂停时,应用程序会抛出以下异常:
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4209)
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:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: android.os.TransactionTooLargeException: data parcel size 4538408 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4183)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4201)
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:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
请帮忙。
答案 0 :(得分:0)
正在将捆绑包发送到这两个片段类。
不要将大量内容放入已保存的实例状态Bundle
。对于片段,“参数”Bundle
(setArguments()
)成为已保存实例状态Bundle
的一部分,因此不要将大量内容放入参数Bundle
中。保存的实例状态Bundle
适用于少量数据:尽可能少,但足以让您在流程终止后恢复UI状态。
相反,做一些其他事情,例如:
ViewModel
,以便在配置更改中保留此数据,但不属于已保存的实例状态Bundle
答案 1 :(得分:-1)
来自Android Developers - TransactionTooLargeException
Binder事务缓冲区的固定大小有限,目前为1Mb
从类似的问题: What to do on TransactionTooLargeException
实际上数据大小约为500kb,IPC事务缓冲区大小设置为1024KB。
因此,数据包大小4538408字节(4MB)太大而无法一次发送。拆分它。