From bc7e584a01e5b8ce9f9d28d1817b383f4d0ab0d3 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Fri, 13 Feb 2026 19:46:46 +0100 Subject: [PATCH] improve flutter engine configuration --- .../kotlin/eu/weblibre/gecko/MainActivity.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/android/app/src/main/kotlin/eu/weblibre/gecko/MainActivity.kt b/app/android/app/src/main/kotlin/eu/weblibre/gecko/MainActivity.kt index 4557be63..2165b17d 100644 --- a/app/android/app/src/main/kotlin/eu/weblibre/gecko/MainActivity.kt +++ b/app/android/app/src/main/kotlin/eu/weblibre/gecko/MainActivity.kt @@ -28,7 +28,8 @@ import io.flutter.plugin.common.MethodChannel class MainActivity: FlutterFragmentActivity() { private val CHANNEL = "eu.weblibre.flutter_mozilla_components/trim_memory" - private lateinit var channel: MethodChannel + private val ENGINE_ID = "engine_id" + private var channel: MethodChannel? = null override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) @@ -38,22 +39,27 @@ class MainActivity: FlutterFragmentActivity() { override fun onTrimMemory(level: Int) { super.onTrimMemory(level) - channel.invokeMethod("onTrimMemory", level) + channel?.invokeMethod("onTrimMemory", level) } override fun provideFlutterEngine(context: Context): FlutterEngine { val cache = FlutterEngineCache.getInstance() - val cachedEngine = cache.get("engine_id") - if (cachedEngine != null) { + val cachedEngine = cache.get(ENGINE_ID) + if (cachedEngine != null && cachedEngine.dartExecutor.isExecutingDart) { return cachedEngine } + if (cachedEngine != null) { + cache.remove(ENGINE_ID) + cachedEngine.destroy() + } + val flutterEngine = FlutterEngine(context.applicationContext) flutterEngine.navigationChannel.setInitialRoute("/") flutterEngine.dartExecutor.executeDartEntrypoint( DartExecutor.DartEntrypoint.createDefault() ) - cache.put("engine_id", flutterEngine) + cache.put(ENGINE_ID, flutterEngine) return flutterEngine }