android 内部和外部插件之间的后台隔离平台通道差异

pprl5pva  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(168)

我有一个背景分离株试图使用平台通道。是的,Flutter 3.7+,根据背景分离株要求设置通道(包括调用BackgroundIsolateBinaryMessenger.ensureInitialized())。从隔离,我可以成功地调用 * 外部 * 插件通过它们的通道进行通信,一切都工作得很好。问题是当调用我自己的插件 * 内部 * 同样的项目。我不能确定在框架中根据插件的位置有什么不同的处理方式。
作为一个内部插件,工具链不会拾取它,也不会将其添加到GeneratedPluginRegistrant中,所以我在我的FlutterActivity中手动完成:

  1. override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
  2. flutterEngine.plugins.add(MainPlugin())
  3. super.configureFlutterEngine(flutterEngine)
  4. }

字符串
我的插件是一个标准的FlutterPlugin,也ActivityAwareMethodCallHandler.我试图设置通道都在更简单的形式和任务队列作为文档建议:

  1. override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
  2. val taskQueue = binding.binaryMessenger.makeBackgroundTaskQueue()
  3. channel = MethodChannel(binding.binaryMessenger, "com.example.foreground_test/platform", StandardMethodCodec.INSTANCE, taskQueue)
  4. //channel = MethodChannel(binding.binaryMessenger, "com.example.foreground_test/platform")
  5. channel.setMethodCallHandler(this)
  6. }


这个插件可以从主隔离区工作,只是不能从后台隔离区工作。后者会导致常见的 MissingPluginException(No implementation found for method test on channel com.example.foreground_test/platform) 错误。
当插件在里面的时候,框架可能会有什么不同的设置?为什么这一点一开始就很重要?

xvw2m8pv

xvw2m8pv1#

经过大量的调查,与输入的核心Flutter开发人员,原因被确定.代码创建了一个辅助FlutterEngine,而外部插件自动关联到这两个,我自己的内部代码只注册到主引擎手动,而不是辅助.

相关问题