0

我正在制作一个应该执行以下任务的应用程序:

  1. 位图中的图像处理
  2. 通过在从任务 1 接收的位图中执行OCR (光学字符识别)来接收字符串
  3. 通过搜索从任务 2 收到的关键字,从应用程序的 Room 数据库中检索数据
  4. 在TextView上显示检索到的数据

我想按顺序找到这 3 个任务的方法,因为它们是相互连接的。但我不知道怎么做。

起初我想如果我能做到

Bitmap b = imageProcessing(bitmap);
String keyword = ocr(b);
String data = retrievedata(keyword);
textview.setText(data);

但正如我在许多文章中读到的那样,这不是运行不同任务的正确方法,因为这样我在主线程上运行所有内容

我也想过为每个不同的任务使用 Executors,但问题是通过这种方式我将无法访问我需要从每个任务中接收的任何内容。(例如,我将无法使用从任务 3 到任务 4 的字符串).. 如果我理解正确

 ExecutorService executor = Executors.newSingleThreadExecutor();
    Handler handler = new Handler(Looper.getMainLooper());

    executor.execute(() -> {
        //Background work here
        handler.post(() -> {
            //UI Thread work here
        });
    });

我找到了这个关于WorkManager的代码实验室,我认为这可能适合我。 https://developer.android.com/codelabs/android-workmanager-java#0

我还找到了关于HandlerThread的教程,但我仍然不确定这是否适合我。 https://www.youtube.com/watch?v=n0mkYSjldeA

我真的很困惑,因为我对 android 很陌生。有人可以推荐我一些东西吗?

4

1 回答 1

0

有很多方法可以顺序运行一堆代码,但我认为以这种方式最好使用三个LiveData并为这些代码写答案,LiveData然后observe在你的activity/fragment/...then 调用 next 函数中执行此操作。我知道这似乎很复杂,但您将能够在每一步中编辑您的答案,而无需按顺序更改或更改其他工作。我建议coroutine对每个不需要 UI 线程的进程使用。

于 2021-10-01T21:31:59.450 回答