OnsavedInstancestate TrassactionToolarGeException(仅在锁定屏幕上或启动活动不在旋转屏幕上)
当调用onsavedInstancestate
时,我将面临活动生命周期的问题。
让我解释一下: 我有 4 fragments
在viewPager
托管recyClerviews
。 这些recyclerviews
从hashmap< 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论