onSaveInstanceStateBundle不大且无大数据传递却出现TransactionTooLargeException
关于Sunmi K2设备上的TransactionTooLargeException问题排查与求助
在Android应用中遇到TransactionTooLargeException,该问题仅出现在Sunmi K2设备上,难以定位根本原因。
✅ 已验证内容:
- 未通过Intent、Bundle、Fragment参数等在组件间传递任何大型对象
- 使用了Activity作用域的ViewModel(通过
activityViewModels()),其持有一个大型模型(如商品/条目列表) - 已记录基类Fragment的
onSaveInstanceState(),最大Bundle大小约21KB,远低于事务限制
🤔 我的猜测:
推测该问题可能是Jetpack通过SavedStateRegistry或相关机制自动持久化ViewModel状态导致的。
💡 我想了解的内容:
- 有人遇到过因Activity作用域ViewModel持有大数据而引发
TransactionTooLargeException的情况吗? - 有没有办法阻止Jetpack尝试持久化ViewModel状态?
- 将大数据移至Repository/单例是否是更好的方案?
崩溃日志(来自Crashlytics)
Title: BinderProxy.transactNative
Fatal Exception: java.lang.RuntimeException android.os.TransactionTooLargeException: data parcel size 526260 bytes Caused by android.os.TransactionTooLargeException: data parcel size 526260 bytes at android.os.BinderProxy.transactNative(BinderProxy.java) at android.os.BinderProxy.transact(BinderProxy.java:584) at android.app.IActivityClientController$Stub$Proxy.activityStopped(IActivityClientController.java:1328) at android.app.ActivityClient.activityStopped(ActivityClient.java:85) at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:143) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7960) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)
若有任何见解或解决方案,将不胜感激!
内容的提问来源于stack exchange,提问作者AbuBakar Siddiq
相关产品推荐
相关产品推荐

