Java 活动暂停时的TransactionTooLargeException

Java 活动暂停时的TransactionTooLargeException,java,android,android-fragments,exception,transactions,Java,Android,Android Fragments,Exception,Transactions,我正在创建一个应用程序,在那里我将非常大的数据以包的形式从服务发送到活动。但是我没有为此使用Messenger。相反,我将数据分配给singleton类中的一个变量,然后从该singleton类检索数据并将其分配给活动 在活动中,我有一个查看页面,其中两个片段被充气。Bundle将被发送到这两个Fragment类 现在,当活动暂停时,应用程序将引发以下异常: at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4209)

我正在创建一个应用程序,在那里我将非常大的数据以
包的形式从
服务发送到
活动
。但是我没有为此使用
Messenger
。相反,我将数据分配给singleton类中的一个变量,然后从该singleton类检索数据并将其分配给活动

活动
中,我有一个
查看页面
,其中两个片段被充气。
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) 
请帮忙

捆绑包将被发送到这两个片段类

不要将大的东西放入已保存的实例状态
包中
。在片段的情况下,“参数”
Bundle
setArguments()
)将成为已保存实例状态
Bundle
的一部分,因此不要将大的内容放入参数
Bundle
。保存的实例状态
捆绑包
用于少量数据:尽可能少,但足以在进程终止后恢复UI状态

相反,请做其他事情,例如:

  • 让托管活动上的片段调用方法获取此数据,或者
  • 使用
    ViewModel
    ,以便在配置更改期间保留此数据,但不属于已保存的实例状态
    Bundle
来自

活页夹事务缓冲区的固定大小有限,目前为1Mb

从类似的问题:

实际上,数据大小约为500kb,IPC事务缓冲区大小设置为1024KB

因此,数据包大小4538408字节(4MB)太大,无法立即发送。分开