使用缓存引擎启动 FlutterActivity 子类

Posted

技术标签:

【中文标题】使用缓存引擎启动 FlutterActivity 子类【英文标题】:Start a FlutterActivity subclass using a cached engine 【发布时间】:2020-09-29 12:16:20 【问题描述】:

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

startActivity(
    FlutterActivity
      .withCachedEngine("my_engine_id")
      .build(this) // this is a Context

)

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

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

【问题讨论】:

【参考方案1】:

查看FlutterActivity 文档后,我找到了provideFlutterEngine method。文档描述清楚地指出:

如果需要缓存的 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
    


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

【讨论】:

您好,它在 xcode 中是如何工作的?我需要你的帮助!

以上是关于使用缓存引擎启动 FlutterActivity 子类的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Android 应用中启动 FlutterActivity 报错 ( have you declared this activity in your AndroidManifest )(代码片

FlutterFlutter 混合开发 ( 安卓端向 Flutter 传递数据 | FlutterFragment 数据传递 | FlutterActivity 数据传递 )

Flutter:带有 patform 通道的 Firebase 消息传递 - 重复的 FlutterActivity

未解决的参考:FlutterActivity

Flutter Android FlutterActivity

Flutter实践深入分析之——FlutterActivity/Fragment原理流程分析