目前,这是我使用 Flutter 从 C++ 中读取的方式:
final Uint8List result = await platform.invokeMethod(Common.MESSAGE_METHOD, {"message": buffer});
Run Code Online (Sandbox Code Playgroud)
Kotlin 是这样处理的:
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == MESSAGE_METHOD) {
val message: ByteArray? = call.argument<ByteArray>("message")
//... //response = Read something FROM C++
result.success(response)
Run Code Online (Sandbox Code Playgroud)
由于这发生在主线程中,如果我花太多时间来回答,我会使 Flutter 的 UI 变慢。
是否有以异步方式获取 C++ 数据的解决方案?
我知道 Flutter 支持事件通道将数据从 C++ 发送回 Flutter。但是仅仅在 Flutter 端请求数据并等待它到达 Future 怎么样,这样我就可以有很多小部件在FutureBuilder准备好时解析某些东西?
如果从 C++ 读取某些内容是一个繁重的过程,您可以使用 AsysncTask 在 Android 后台执行它。
internal class HeavyMsgReader(var result: MethodChannel.Result) : AsyncTask<ByteArray?, Void?, String?>() {
override fun doInBackground(vararg message: ByteArray?): String {
//... //response = Read something FROM C++
return "response"
}
override fun onPostExecute(response: String?) {
result.success(response)
}
}
Run Code Online (Sandbox Code Playgroud)
调用异步任务:
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == MESSAGE_METHOD) {
val message: ByteArray? = call.argument<ByteArray>("message")
HeavyMsgReader(result).execute(message);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |