use engine caching
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
||||
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
@@ -50,7 +51,7 @@
|
||||
|
||||
<application
|
||||
android:label="Lensai"
|
||||
android:name="${applicationName}"
|
||||
android:name=".MyApplication"
|
||||
android:icon="@mipmap/launcher_icon"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:enableOnBackInvokedCallback="true">
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package me.movenext.bang_navigator
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.FlutterEngineCache
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
class MainActivity: FlutterFragmentActivity() {
|
||||
@@ -10,6 +13,7 @@ class MainActivity: FlutterFragmentActivity() {
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
|
||||
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||
}
|
||||
|
||||
@@ -17,4 +21,12 @@ class MainActivity: FlutterFragmentActivity() {
|
||||
super.onTrimMemory(level)
|
||||
channel.invokeMethod("onTrimMemory", level)
|
||||
}
|
||||
|
||||
override fun getCachedEngineId(): String {
|
||||
return "engine_id"
|
||||
}
|
||||
|
||||
override fun shouldDestroyEngineWithHost(): Boolean {
|
||||
return false // Keep engine alive when activity is destroyed
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package me.movenext.bang_navigator
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.FlutterEngineCache
|
||||
import io.flutter.embedding.engine.dart.DartExecutor
|
||||
|
||||
class MyApplication : Application() {
|
||||
private fun getProcessNameCompat(): String {
|
||||
// Try to get process name from ActivityManager
|
||||
val pid = android.os.Process.myPid()
|
||||
val manager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
|
||||
|
||||
for (processInfo in manager.runningAppProcesses) {
|
||||
if (processInfo.pid == pid) {
|
||||
return processInfo.processName
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to package name if process name cannot be determined
|
||||
return packageName
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
val processName = getProcessNameCompat()
|
||||
// Only initialize Flutter engine in the main process
|
||||
if (processName == packageName) {
|
||||
// Initialize the Flutter engine
|
||||
val flutterEngine = FlutterEngine(this)
|
||||
|
||||
// Pre-warm the Flutter engine with your initial route
|
||||
flutterEngine.navigationChannel.setInitialRoute("/")
|
||||
flutterEngine.dartExecutor.executeDartEntrypoint(
|
||||
DartExecutor.DartEntrypoint.createDefault()
|
||||
)
|
||||
|
||||
// Cache the Flutter engine
|
||||
FlutterEngineCache.getInstance().put("engine_id", flutterEngine)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user