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_SPECIAL_USE" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
|
<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_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.RECORD_AUDIO" />
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
@@ -50,7 +51,7 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="Lensai"
|
android:label="Lensai"
|
||||||
android:name="${applicationName}"
|
android:name=".MyApplication"
|
||||||
android:icon="@mipmap/launcher_icon"
|
android:icon="@mipmap/launcher_icon"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
android:enableOnBackInvokedCallback="true">
|
android:enableOnBackInvokedCallback="true">
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package me.movenext.bang_navigator
|
package me.movenext.bang_navigator
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
|
import io.flutter.embedding.engine.FlutterEngineCache
|
||||||
import io.flutter.plugin.common.MethodChannel
|
import io.flutter.plugin.common.MethodChannel
|
||||||
|
|
||||||
class MainActivity: FlutterFragmentActivity() {
|
class MainActivity: FlutterFragmentActivity() {
|
||||||
@@ -10,6 +13,7 @@ class MainActivity: FlutterFragmentActivity() {
|
|||||||
|
|
||||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||||
super.configureFlutterEngine(flutterEngine)
|
super.configureFlutterEngine(flutterEngine)
|
||||||
|
|
||||||
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,4 +21,12 @@ class MainActivity: FlutterFragmentActivity() {
|
|||||||
super.onTrimMemory(level)
|
super.onTrimMemory(level)
|
||||||
channel.invokeMethod("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