Air*_*ark 9 android dart flutter
我正在创建 Flutter 插件。我将回调从 Android 发送到 Flutter 的渠道很少。情况是我正在侦听一些在主 UI 线程之外的其他线程中触发的事件。
最近 Flutter 更新后我开始收到这样的错误
E/AndroidRuntime( 9400): FATAL EXCEPTION: STARTING
E/AndroidRuntime( 9400): Process: com.northernbitcoin.coinyacapp, PID: 9400
E/AndroidRuntime( 9400): java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: STARTING
E/AndroidRuntime( 9400): at io.flutter.embedding.engine.FlutterJNI.ensureRunningOnMainThread(FlutterJNI.java:794)
E/AndroidRuntime( 9400): at io.flutter.embedding.engine.FlutterJNI.dispatchPlatformMessage(FlutterJNI.java:684)
E/AndroidRuntime( 9400): at io.flutter.embedding.engine.dart.DartMessenger.send(DartMessenger.java:80)
E/AndroidRuntime( 9400): at io.flutter.embedding.engine.dart.DartExecutor.send(DartExecutor.java:174)
E/AndroidRuntime( 9400): at io.flutter.view.FlutterNativeView.send(FlutterNativeView.java:144)
E/AndroidRuntime( 9400): at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler$EventSinkImplementation.success(EventChannel.java:226)
...
Run Code Online (Sandbox Code Playgroud)
我找到的唯一信息在这里 https://github.com/flutter/flutter/issues/34993
是的,这里有一个解决方案 https://github.com/flutter/flutter/issues/34993#issue-459900986
但这对我来说似乎太开销了,因为我不想handler为每个事件创建新的
还有其他解决方案吗?
执行与上面建议的解决方案相同的操作,但仅将其用于特定事件。
创建 ui 处理程序对象
public class BitcoinWalletPlugin implements MethodCallHandler, ... {
private Handler uiThreadHandler = new Handler(Looper.getMainLooper());
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
switch (this.channel) {
...
case CHANNEL_NAME:
// before
// bitcoinWallet.setOnStartupListener(() -> eventSink.success(true));
// after
bitcoinWallet.setOnStartupListener(() -> uiThreadHandler.post(() -> eventSink.success(true)));
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8687 次 |
| 最近记录: |