OnsavedInstancestate TrassactionToolarGeException(仅在锁定屏幕上或启动活动不在旋转屏幕上)

发布于 2025-02-03 18:36:37 字数 3428 浏览 1 评论 0原文

当调用onsavedInstancestate时,我将面临活动生命周期的问题。

让我解释一下: 我有 4 fragmentsviewPager 托管recyClerviews。 这些recyclerviewshashmap< string,amedia>()显示数据。

hashmap可能很大,当我旋转电话(肖像/风景)时:

@Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("medias", mMapMedias);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        if (savedInstanceState != null) {
            mMapMedias = (HashMap<String, ArrayList<AMedia>>) savedInstanceState.getSerializable("medias");
            render();
        }
    }

但是当我锁定启动其他活动仅电话OnSaveInstanceState and App开始在锁定屏幕上崩溃,并带有错误:

JNI critical lock held for 29.211ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 45037652)
W/ActivityStopInfo: Bundle stats:
ActivityStopInfo:   android:viewHierarchyState [size=1036]
JNI critical lock held for 128.524ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:   androidx.lifecycle.BundlableSavedStateRegistry.key [size=45035172]
ActivityStopInfo:     android:support:activity-result [size=2908]
ActivityStopInfo:       KEY_COMPONENT_ACTIVITY_REGISTERED_KEYS [size=2192]
JNI critical lock held for 88.565ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:     android:support:fragments [size=45032008]
JNI critical lock held for 86.960ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:       android:support:fragments [size=45031936]
ActivityStopInfo: PersistableBundle stats:
W/ActivityStopInfo:   [null]
AndroidRuntime: Shutting down VM
    
    --------- beginning of crash
AndroidRuntime: FATAL EXCEPTION: main
    PID: 27712
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 45037652 bytes
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:233)
        at android.app.ActivityThread.main(ActivityThread.java:8010)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
     Caused by: android.os.TransactionTooLargeException: data parcel size 45037652 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:591)
        at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4408)
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)

我认为旋转时通过Javabinder进行相同的呼叫,但不会崩溃,为什么在锁定或启动其他活动崩溃?

有解决方案吗?我正在测试Android 12。

I'm facing an issue on the Activity Lifecycle when onSavedInstanceState is Called.

Let me explain :
I have 4 Fragments on ViewPager hosting RecyclerViews.
These RecyclerViews display data from HashMap<String, AMedia>().

The HashMap can be large, when I rotate the phone (portrait/landscape) the onSavedInstanceState and on onViewStateRestored are called and data are well transmitted by the Framework on the UI like following :

@Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("medias", mMapMedias);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        if (savedInstanceState != null) {
            mMapMedias = (HashMap<String, ArrayList<AMedia>>) savedInstanceState.getSerializable("medias");
            render();
        }
    }

But when I lock or start an other activity the phone only onSaveInstanceState and app begins crash on the lock screen with error :

JNI critical lock held for 29.211ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 45037652)
W/ActivityStopInfo: Bundle stats:
ActivityStopInfo:   android:viewHierarchyState [size=1036]
JNI critical lock held for 128.524ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:   androidx.lifecycle.BundlableSavedStateRegistry.key [size=45035172]
ActivityStopInfo:     android:support:activity-result [size=2908]
ActivityStopInfo:       KEY_COMPONENT_ACTIVITY_REGISTERED_KEYS [size=2192]
JNI critical lock held for 88.565ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:     android:support:fragments [size=45032008]
JNI critical lock held for 86.960ms on Thread[1,tid=27712,Runnable,Thread*=0xb400007388322010,peer=0x73356338,"main"]
ActivityStopInfo:       android:support:fragments [size=45031936]
ActivityStopInfo: PersistableBundle stats:
W/ActivityStopInfo:   [null]
AndroidRuntime: Shutting down VM
    
    --------- beginning of crash
AndroidRuntime: FATAL EXCEPTION: main
    PID: 27712
    java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 45037652 bytes
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:233)
        at android.app.ActivityThread.main(ActivityThread.java:8010)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
     Caused by: android.os.TransactionTooLargeException: data parcel size 45037652 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:591)
        at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4408)
        at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)

I think on rotate the same calls are done through JavaBinder but not crashing, why on Lock or start an other activity it crashs ?

Any solution ? I'm testing on Android 12.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文