使用缓存引擎启动 FlutterActivity 子类

Nic*_*sco 5 android kotlin flutter

我目前正在将使用 Flutter 开发的视图添加到现有的 Android 应用程序中。我一直在关注 Flutter网站上的教程,并决定使用缓存引擎,以最大限度地减少用户在导航到应用程序的 Flutter 部分时可能遇到的延迟。为此,您必须启动 Flutter 活动,例如

startActivity(
    FlutterActivity
      .withCachedEngine("my_engine_id")
      .build(this) // this is a Context
Run Code Online (Sandbox Code Playgroud)

)

一段时间后,我需要编写一个方法通道以从应用程序的 Flutter 部分通信回 Android 主机应用程序,因此我按照 Flutter 的另一个教程中的说明进行操作,其中显示实现通道的活动必须延伸FlutterActivity

所以我的问题是我不确定如何使用缓存引擎初始化这个活动,因为我显然不能再使用FlutterActivity.withCachedEngine了。有没有人已经解决了这个问题?

Nic*_*sco 12

查看FlutterActivity文档后我找到了provideFlutterEngine 方法。文档描述明确指出:

如果需要缓存的 FlutterEngine,则应在该钩子中提供缓存的 FlutterEngine。

所以我的类的最终实现现在看起来像这样

class MyActivity : FlutterActivity() {

    override fun provideFlutterEngine(context: Context): FlutterEngine? =
        FlutterEngineCache.getInstance().get(FlutterConstants.ENGINE_ID)

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "my-channel")
            .setMethodCallHandler { call, result ->
                if (call.method == "my-method") {
                    myMethod()
                    result.success(null)
                } else {
                    result.notImplemented()
                }
            }
    }

    private fun myMethod() {
        // Do native stuff
    }

}
Run Code Online (Sandbox Code Playgroud)

我只是开始写startActivity(Intent(this, MyActivity::class.java))