Skip to content

ClassCastException: android.view.AbsSavedState$1 cannot be cast to io.flutter.embedding.android.FlutterSplashView$SavedState #94329

@songhai

Description

@songhai

1、when I from flutter1.22.3 upgrade to flutter2.5.3 ,I encountered two similar crashes probabilistic happen,crash log is below
2、other info:My Activity extends the FlutterFragmentActivity
3、About this crash, I review the flutter source code, maybe because the FlutterFragmentActivity contains a non-random integer as a viewid,example,if the viewid equals the FlutterView's id or the FlutterSplashView‘s id,the This crash is going to happen
4、In addition recommendations:I find FlutterSplashView class's onRestoreInstanceState method is not robust enough,I recommend you look at the Android Framework's TextView 's onRestoreInstanceState implementation

    @Override
    public void onRestoreInstanceState(Parcelable state) {
        if (!(state instanceof SavedState)) {
            super.onRestoreInstanceState(state);
            return;
        }

        SavedState ss = (SavedState) state;
        super.onRestoreInstanceState(ss.getSuperState());
        ...........
        ...........
      }
crash log
-------------------------the first  log   below-------------------------
---java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to io.flutter.embedding.android.FlutterSplashView$SavedState
io.flutter.embedding.android.FlutterSplashView.onRestoreInstanceState(FlutterSplashView.java:102)
android.view.View.dispatchRestoreInstanceState(View.java:20065)
android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3902)
android.view.View.restoreHierarchyState(View.java:20043)
androidx.fragment.app.Fragment.restoreViewState(Fragment.java:573)
androidx.fragment.app.FragmentStateManager.restoreViewState(FragmentStateManager.java:346)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
android.app.Activity.performStart(Activity.java:7986)
android.app.ActivityThread.handleStartActivity(ActivityThread.java:3528)
android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:226)
android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:206)
android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:178)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:102)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2229)
android.os.Handler.dispatchMessage(Handler.java:107)
android.os.Looper.loop(Looper.java:238)
android.app.ActivityThread.main(ActivityThread.java:7798)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:512)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)


-------------------------the  second  log   below-------------------------

---java.lang.ClassCastException: android.view.View$BaseSavedState cannot be cast to io.flutter.embedding.android.FlutterSplashView$SavedState
io.flutter.embedding.android.FlutterSplashView.onRestoreInstanceState(FlutterSplashView.java:102)
android.view.View.dispatchRestoreInstanceState(View.java:21048)
android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:4204)
android.view.View.restoreHierarchyState(View.java:21026)
androidx.fragment.app.Fragment.restoreViewState(Fragment.java:573)
androidx.fragment.app.FragmentStateManager.restoreViewState(FragmentStateManager.java:346)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1450)
android.app.Activity.performStart(Activity.java:8382)
android.app.ActivityThread.handleStartActivity(ActivityThread.java:4113)
android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:235)
android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:215)
android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:187)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:105)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2532)
android.os.Handler.dispatchMessage(Handler.java:109)
android.os.Looper.loop(Looper.java:228)
android.app.ActivityThread.main(ActivityThread.java:8731)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:613)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1085)

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work lista: productionIssues experienced in live production appsc: crashStack traces logged to the consoleframeworkflutter/packages/flutter repository. See also f: labels.platform-androidAndroid applications specificallyr: fixedIssue is closed as already fixed in a newer version

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions