EventChannel onListen通道建立失败QA分析

264 阅读1分钟
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
    this.eventSink = events
    XLog.d("FlutterEventChannel", "事件流建立成功")
    resendWaitMsgOnPrepared()
}
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
    XLog.d("FlutterEventChannel", "onAttachedToEngine called")
    eventChannel = EventChannel(binding.binaryMessenger, eventChannelName)
    eventChannel?.setStreamHandler(this)

    mMethodChannel = MethodChannel(binding.binaryMessenger, methodChannelName)
    mMethodChannel.setMethodCallHandler(this)

}

上述的两个代码片段中,EventChannel/ MethodChannel 通道按照正常的预期在Flutter端都能够正常的建立,但是onListen 函数会存在一定概率无法成功的接受到回调;

比如在Flutter端先执行了MethodChannel.invoke(’XXX‘) 等操作,然后再执行如下的代码片段

EventChannel(eventChannelName).receiveBroadcastStream().listen()

具体更新层次的原因需要从Flutter的底层原理进行分析;

Flutter的代码执行顺序必须是这样的: (1)文章中的code片段3; (2)MethodChannel.invoke(’XXX‘) (3)Native端的onListen() 函数通道日志就能够正常的建立.