Android 添加到应用程序中不存在请求的颤振引擎

Android 添加到应用程序中不存在请求的颤振引擎,android,flutter,flutter-add-to-app,Android,Flutter,Flutter Add To App,我已使用缓存的颤振引擎进入现有的本机应用程序(添加到应用程序) override fun onCreate(savedInstanceState: Bundle?) { Log.d(TAG, "onCreate") super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) context

我已使用缓存的颤振引擎进入现有的本机应用程序(添加到应用程序)

override fun onCreate(savedInstanceState: Bundle?) {
        Log.d(TAG, "onCreate")
        
        
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        context = this.application.applicationContext
        if (!FlutterEngineCache.getInstance().contains(
                FLUTTER_ENGINE
            )
        ) {
            mFlutterEngine = FlutterEngine(context)
            mFlutterEngine.dartExecutor
                .executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
            FlutterEngineCache.getInstance()
                .put(FLUTTER_ENGINE, mFlutterEngine)
        }
        //Create Flutter Fragment
        mFragmentManager = supportFragmentManager
        mFlutterFragment = mFragmentManager.findFragmentByTag(FLUTTER_FRAGMENT) as FlutterFragment?
        if (mFlutterFragment == null) {
            mFlutterFragment =
                FlutterFragment.withCachedEngine(FLUTTER_ENGINE).transparencyMode(FlutterView.TransparencyMode.opaque).build()
            mFragmentManager
                .beginTransaction()
                .add(R.id.fragment_container, mFlutterFragment as Fragment, FLUTTER_FRAGMENT)
                .commit()
        } else {
            mFragmentManager
                .beginTransaction()
                .show(mFragmentManager.findFragmentByTag(FLUTTER_FRAGMENT)!!)
                .commit()
        }
}
我在生产应用程序中遇到以下崩溃

  Caused by: java.lang.IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'FLUTTER_ENGINE'
        at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.setupFlutterEngine(FlutterActivityAndFragmentDelegate.java:211)
        at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:157)
        at io.flutter.embedding.android.FlutterFragment.onAttach(FlutterFragment.java:597)
        at androidx.fragment.app.Fragment.performAttach(Fragment.java:2574)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:828)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
        at androidx.fragment.app.FragmentManagerImpl.dispatchCreate(FragmentManagerImpl.java:2607)
        at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:235)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:316)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
        at com.flutter.android.MainActivity.onCreate(MainActivity.kt:33)
 
如何繁殖

  • 打开开发人员设置,将“后台进程”设置为“否” “后台进程”并设置为“不保留活动”

  • 打开应用程序,然后按home

  • 再次打开应用程序。。它会崩溃,只有一个例外

    原因:java.lang.IllegalStateException:请求的缓存FlatterEngine在FlatterEngineCache中不存在:“Flatter\u ENGINE”

  • 解决方案

    super.oncreate()之前初始化颤振引擎

    如何繁殖

  • 打开开发人员设置,将“后台进程”设置为“否” “后台进程”并设置为“不保留活动”

  • 打开应用程序,然后按home

  • 再次打开应用程序。。它会崩溃,只有一个例外

    原因:java.lang.IllegalStateException:请求的缓存FlatterEngine在FlatterEngineCache中不存在:“Flatter\u ENGINE”

  • 解决方案

    super.oncreate()之前初始化颤振引擎


    我有一个有3个标签的应用程序,其中一个有一个颤振碎片。我们的应用程序在制作时也发生了崩溃,但我无法复制它。也不适用于如上所述的再现场景。我最终在onDestroy手动移除了颤振引擎,以再现这种情况。作为一个解决方案,我检查颤振标签是否打开,然后按照上面所述创建引擎。我有一个有3个标签的应用程序,其中一个标签上有颤振碎片。我们的应用程序在制作时也发生了崩溃,但我无法复制它。也不适用于如上所述的再现场景。我最终在onDestroy手动移除了颤振引擎,以再现这种情况。作为一个解决方案,我检查颤振选项卡是否打开,然后创建如上所述的引擎。
    override fun onCreate(savedInstanceState: Bundle?) {
            Log.d(TAG, "onCreate")
             context = this.application.applicationContext
            if (!FlutterEngineCache.getInstance().contains(
                    FLUTTER_ENGINE
                )
            ) {
                mFlutterEngine = FlutterEngine(context)
                mFlutterEngine.dartExecutor
                    .executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
                FlutterEngineCache.getInstance()
                    .put(FLUTTER_ENGINE, mFlutterEngine)
            }
           
            
            super.onCreate(savedInstanceState)
    
            setContentView(R.layout.activity_main)
            //Create Flutter Fragment
            mFragmentManager = supportFragmentManager
            mFlutterFragment = mFragmentManager.findFragmentByTag(FLUTTER_FRAGMENT) as FlutterFragment?
            if (mFlutterFragment == null) {
                mFlutterFragment =
                    FlutterFragment.withCachedEngine(FLUTTER_ENGINE).transparencyMode(FlutterView.TransparencyMode.opaque).build()
                mFragmentManager
                    .beginTransaction()
                    .add(R.id.fragment_container, mFlutterFragment as Fragment, FLUTTER_FRAGMENT)
                    .commit()
            } else {
                mFragmentManager
                    .beginTransaction()
                    .show(mFragmentManager.findFragmentByTag(FLUTTER_FRAGMENT)!!)
                    .commit()
            }