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)
如何繁殖
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()
}