Как запустить пользовательский код для платформы в фоновом режиме?

Когда я запускаю тяжелое выполнение кода. Весь интерфейс Flutter зависает. Как сделать этот процесс асинхронным?

@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);

    MethodChannel methodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL);
    methodChannel.setMethodCallHandler(
            (call, result) -> {
                try {
                    //Emulate HardWork
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                result.success("HardWork Result");
            }
    );
}

Я пытался создать поток, но result уничтожается до его завершения, и приложение падает

public class MainActivity extends FlutterActivity {
    private static final String CHANNEL = "test/channel";

    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);

        MethodChannel methodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL);
        methodChannel.setMethodCallHandler(
                (call, result) -> new Thread(new MyRunnable(result)).start()
        );
    }
}

class MyRunnable implements Runnable {
    private MethodChannel.Result result;

    MyRunnable(MethodChannel.Result result) {
        this.result = result;
    }

    public void run() {
        try {
            //Emulate HardWork
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        result.success("HardWork Result");
    }
}

Реализация вызова и ожидания результата на стороне Flutter

class _MyHomePageState extends State<MyHomePage> {
  static const platform = const MethodChannel(CHANNEL);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CircularProgressIndicator(),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          String response = await platform.invokeMethod("hardWork");
          print(response);
        },
      ),
    );
  }
}

Ответы (0 шт):