标签: transactiontoolargeexception

android:support:fragments 保存的 Activity 越来越大导致 TransactionTooLargeException

我有一个控制多个片段的活动。默认片段是HomepageFragment. 当替换到不同的 Fragment 时,我总是确保堆栈保持平坦 - 这意味着只有HomepageFragment保持在堆栈中并在其顶部是当前 Fragment。例如:

  1. 活动开始于 HomepageFragment
  2. FragmentA需要替换 to - 一切都是好的原因HomepageFragment是最后一个 Fragment
  3. 现在堆栈是HomepageFragment->FragmentA
  4. FragmentB需要替换为- 首先弹出堆栈上的最后一个 Fragment ( fragmentA) 然后替换为FragmentB
  5. 现在堆栈是HomepageFragment->FragmentB

在生产中,我看到很多TransactionTooLargeException崩溃。

我曾经TooLargeTool跟踪问题的来源,我发现当我在活动中的片段之间切换时,其中有一个android:support:fragmentsSaveInstanceState变得越来越大(呈指数级),直到发生崩溃。

似乎即使从堆栈中弹出时,有关原始事务的一些数据也会继续保存。

按照此处的建议将其删除会导致 Activity 在被操作系统杀死后无法正确恢复。

我压平堆栈的方法有什么问题吗?有没有更好的方法?究竟保存在什么数据下android:support:fragments

注意:我没有为这些片段设置任何参数。此外,它们在其 saveInstanceState 包中保存了非常小的数据。

谢谢!

android android-fragments android-activity onsaveinstancestate transactiontoolargeexception

11
推荐指数
1
解决办法
886
查看次数

反应原生android TransactionTooLargeException

我们最近发布了一个 ReactNative 应用程序,但我们收到了许多关于 android 的崩溃报告,其中包含java.lang.RuntimeExceptionBinder.java android.os.TransactionTooLargeException: data parcel size X(between 400k to 750k) bytes.

在我们的应用程序中,我们有一个无限滚动列表(Flatlist),它可以变得非常大(2k + 记录),这被怀疑是导致此问题的原因。我已经看到https://github.com/facebook/react-native/issues/19458打开了,但没有解决方案。还使用建议的工具(TooLargeTool)在那里指出在进入后台时会保存 0 个字节。

有没有人解决过这个问题或对如何解决它有任何意见?

谢谢

android react-native react-native-android transactiontoolargeexception

6
推荐指数
0
解决办法
363
查看次数

Android IPC 最大事务大小?

我正在制作使用 Binder 相互通信的小型 Android 应用程序。

据我所知,Android Binder 具有最大事务大小 (1MB)。例如,TransactionTooLargeException当应用程序尝试使用 Binder 事务发送大于 1MB 的消息时抛出。

我不明白为什么这是有限的。是否有任何理由限制最大交易大小?LinuxSOCK_STREAM也是 IPC,但它没有限制。

这个限制有什么合理的理由吗?Android 文档似乎没有解释为什么他们将事务大小限制为 1MB。(“Binder 事务缓冲区有一个有限的固定大小”那么他们为什么要限制缓冲区?)。

如果框架没有限制 IPC 大小,是否有任何关键情况?据我所知,即使没有最大 IPC 大小的限制,Linux 也能很好地工作。

android ipc android-binder transactiontoolargeexception

5
推荐指数
1
解决办法
2440
查看次数

使用 FragmentStatePagerAdapter 的 TransactionTooLargeException

我使用 ViewPager(offscreenPageLimit默认为 1)和 FragmentStatePagerAdapter 编写了一个阅读器应用程序,其中我有

override fun getItem(position: Int) = ComicFragment.newInstance(index = position + 1)
Run Code Online (Sandbox Code Playgroud)

这里创建了一个index可能大于2000的ComicFragment,具有这样索引的漫画将被加载到片段中。默认setRetainInstance为 false

同样在片段中,我将索引和布尔值保存transMode在savedInstanceState中,这样当用户来回滑动几页时,他们将使页面处于与原来相同的状态。它还将维护配置更改的状态。

问题是,随着每个片段从TooLargeTool中滑走,就会出现

D/TooLargeTool: ComicFragment.onSaveInstanceState wrote: Bundle126358192 contains 4 keys and measures 0.8 KB when serialized as a Parcel
    * androidx.lifecycle.BundlableSavedStateRegistry.key = 0.1 KB
    * transMode = 0.0 KB
    * android:user_visible_hint = 0.1 KB
    * android:view_state = 0.6 KB
    * fragment arguments = Bundle247579945 contains 1 keys and measures 0.0 KB when serialized as …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager fragmentstatepageradapter transactiontoolargeexception

5
推荐指数
0
解决办法
943
查看次数

由 android.os.TransactionTooLargeException 引起:数据包大小 5971992 字节是否有任何工具可以调试此错误

我正在开发生产应用程序。我在 Crashlytics 中收到异常。我不知道发生了什么,因为它没有指向任何活动。只是我收到这样的错误。

Caused by android.os.TransactionTooLargeException: data parcel size 5971992 bytes
   at android.os.BinderProxy.transactNative(BinderProxy.java)
   at android.os.BinderProxy.transact(BinderProxy.java:1179)
   at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3969)
   at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)
   at android.os.Handler.handleCallback(Handler.java:873)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:193)
   at android.app.ActivityThread.main(ActivityThread.java:6898)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Run Code Online (Sandbox Code Playgroud)

是否有任何工具/库可以检测此问题

我也检查了这个链接对 TransactionTooLargeException 做什么

我试过这个工具https://github.com/guardian/toolargetoo它对我没有帮助。你能分享你的想法吗

android kotlin transactiontoolargeexception

5
推荐指数
1
解决办法
4883
查看次数

android.os.TransactionTooLargeException:数据包大小NOUGAT错误

我正在使用RETROFIT进行api调用,我从服务器接收到JSON响应,该响应的大小几乎不超过30kb。JSON将响应解析为复杂的Object时,会引发此错误。

java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(BinderProxy.java:510)
    at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4524)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Run Code Online (Sandbox Code Playgroud)

如果尝试将响应存储在Object类中,然后通过LinkedHashMap获取值,则可以获取数据。但是,这将是一个乏味的过程。

谁能帮助我找出问题所在以及如何找到解决方案?

根据我的研究,这仅适用于版本> = Nougat的android设备。在此之下,它像小菜一碟。

我也尝试了以下提到的一些解决方案:-> onSaveInstanceState.clear()-但这不起作用。 你可以在这里找到帖子

java android exception parcelable transactiontoolargeexception

2
推荐指数
1
解决办法
1101
查看次数