fixed crash if you back out of 2 double engine activities (#763)

pull/766/head
gaaclarke 5 years ago committed by GitHub
parent d04f3295c0
commit 680c8babd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -20,6 +20,15 @@ class DoubleFlutterActivity : FragmentActivity(), EngineBindingsDelegate {
EngineBindings(activity = this, delegate = this, entrypoint = "bottomMain") EngineBindings(activity = this, delegate = this, entrypoint = "bottomMain")
} }
private val numberOfFlutters = 2 private val numberOfFlutters = 2
private val engineCountStart : Int
private companion object {
var engineCounter = 0
}
init {
engineCountStart = engineCounter
engineCounter += numberOfFlutters
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -35,25 +44,25 @@ class DoubleFlutterActivity : FragmentActivity(), EngineBindingsDelegate {
setContentView(root) setContentView(root)
val app = applicationContext as App
for (i in 0 until numberOfFlutters) { for (i in 0 until numberOfFlutters) {
val engineId = engineCountStart + i
val containerId = 12345 + engineId
val flutterContainer = FrameLayout(this) val flutterContainer = FrameLayout(this)
root.addView(flutterContainer) root.addView(flutterContainer)
flutterContainer.id = 12345 + i flutterContainer.id = containerId
flutterContainer.layoutParams = LinearLayout.LayoutParams( flutterContainer.layoutParams = LinearLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT,
1.0f 1.0f
) )
val engine = if (i == 0) topBindings.engine else bottomBindings.engine val engine = if (i == 0) topBindings.engine else bottomBindings.engine
FlutterEngineCache.getInstance().put(i.toString(), engine) FlutterEngineCache.getInstance().put(engineId.toString(), engine)
val flutterFragment = val flutterFragment =
FlutterFragment.withCachedEngine(i.toString()).build<FlutterFragment>() FlutterFragment.withCachedEngine(engineId.toString()).build<FlutterFragment>()
fragmentManager fragmentManager
.beginTransaction() .beginTransaction()
.add( .add(
12345 + i, containerId,
flutterFragment flutterFragment
) )
.commit() .commit()
@ -65,7 +74,8 @@ class DoubleFlutterActivity : FragmentActivity(), EngineBindingsDelegate {
override fun onDestroy() { override fun onDestroy() {
for (i in 0 until numberOfFlutters) { for (i in 0 until numberOfFlutters) {
FlutterEngineCache.getInstance().remove(i.toString()) val engineId = engineCountStart + i
FlutterEngineCache.getInstance().remove(engineId.toString())
} }
super.onDestroy() super.onDestroy()

Loading…
Cancel
Save