首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >牛油糖上的android.os.TransactionTooLargeException

牛油糖上的android.os.TransactionTooLargeException
EN

Stack Overflow用户
提问于 2016-08-23 18:25:35
回答 10查看 48.7K关注 0票数 78

我更新了Nexus5X到安卓N,现在当我在上面安装应用程序(调试或发布)时,我在每个屏幕过渡中都会得到TransactionTooLargeException。这款应用程序在所有其他设备上都能正常工作。在PlayStore上运行的代码基本相同的旧应用程序在Nexus5X上也可以运行。有没有人有同样的问题?

代码语言:javascript
复制
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 592196 bytes
   at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3752)
   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:6077)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: android.os.TransactionTooLargeException: data parcel size 592196 bytes
   at android.os.BinderProxy.transactNative(Native Method)
   at android.os.BinderProxy.transact(Binder.java:615)
   at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3606)
   at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3744)
   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:6077) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
EN

回答 10

Stack Overflow用户

发布于 2017-09-23 14:39:19

做了一次打击和试验,最终解决了我的问题。将此代码添加到您的Activity

代码语言:javascript
复制
@Override
protected void onSaveInstanceState(Bundle oldInstanceState) {
    super.onSaveInstanceState(oldInstanceState);
    oldInstanceState.clear();
}
票数 21
EN

Stack Overflow用户

发布于 2017-04-04 04:14:30

TransactionTooLargeException已经困扰我们大约4个月了,我们终于解决了这个问题!

发生的事情是,我们在ViewPager中使用FragmentStatePagerAdapter。用户可以翻页并创建100+片段(这是一个阅读应用程序)。

尽管我们在destroyItem()中正确地管理了片段,但在FragmentStatePagerAdapter的Androids实现中存在一个错误,它保留了对以下列表的引用:

代码语言:javascript
复制
private ArrayList<Fragment.SavedState> mSavedState = new ArrayList<Fragment.SavedState>();

当安卓的FragmentStatePagerAdapter试图保存状态时,它将调用该函数

代码语言:javascript
复制
@Override
public Parcelable saveState() {
    Bundle state = null;
    if (mSavedState.size() > 0) {
        state = new Bundle();
        Fragment.SavedState[] fss = new Fragment.SavedState[mSavedState.size()];
        mSavedState.toArray(fss);
        state.putParcelableArray("states", fss);
    }
    for (int i=0; i<mFragments.size(); i++) {
        Fragment f = mFragments.get(i);
        if (f != null && f.isAdded()) {
            if (state == null) {
                state = new Bundle();
            }
            String key = "f" + i;
            mFragmentManager.putFragment(state, key, f);
        }
    }
    return state;
}

正如您所看到的,即使您正确地管理了FragmentStatePagerAdapter子类中的片段,基类仍然会为所创建的每个片段存储一个Fragment.SavedState。当数组被转储到parcelableArray,并且操作系统不喜欢它100+项时,就会发生TransactionTooLargeException。

因此,我们的解决方法是覆盖saveState()方法,并且不存储任何“状态”。

代码语言:javascript
复制
@Override
public Parcelable saveState() {
    Bundle bundle = (Bundle) super.saveState();
    bundle.putParcelableArray("states", null); // Never maintain any states from the base class, just null it out
    return bundle;
}
票数 18
EN

Stack Overflow用户

发布于 2017-06-14 16:36:33

我在我的Nougat设备上也遇到了这个问题。我的应用程序使用一个包含4个片段的带有视图分页的片段。我将一些大的构造参数传递给了导致问题的4个片段。

TooLargeTool的帮助下,我追踪了导致这个问题的Bundle的大小。

最后,我在POJO对象上使用putSerializable解决了这个问题,该对象实现了Serializable,而不是在片段初始化期间使用putString传递大型原始String。这将Bundle的大小减少了一半,并且不会抛出TransactionTooLargeException。因此,请确保您不会向Fragment传递过大的参数。

谷歌问题跟踪器中与P.S.相关的问题:https://issuetracker.google.com/issues/37103380

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39098590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档