gpt4 book ai didi

android - 在 Android 中,在 WorkManager 的 Worker 类中运行异步任务

转载 作者:行者123 更新时间:2023-12-04 23:24:10 24 4
gpt4 key购买 nike

我有一个 Worker,我首先要在其中应用 FFMPEG 命令,然后再将其上传到服务器。由于 Worker 已经在后台运行,因此为了在文件上传之前保持结果,我使用了 RxJava .blockingGet() 方法。但我无法理解如何通过 RxJava 等方式同步执行 FFmpeg 命令。我发现的一个技巧是使用 ListenableWorker 但它的文档说它在 10 分钟后停止工作。所以,我不想采用那个解决方案。以下是 FFmpeg 的方法,就像任何其他异步方法一样。如何使其同步或与 RxJava 集成?任何想法都将是可观的。

 ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
@Override
public void onFailure(String s) {
}

@Override
public void onSuccess(String s) {
uploadMediaItem(mediaUpload);
}

@Override
public void onProgress(String s) {
}

@Override
public void onStart() {
}

@Override
public void onFinish() {

// countDownLatch.countDown();

}
});

这是我的 worker 的流程:
  • 检查数据库中的待处理帖子计数。
  • 选择第一个帖子并检查它是否有待上传的媒体列表。
  • 递归选择媒体并检查是否需要对其进行编辑。
  • 应用 FFmpeg 编辑并从数据库中上传和删除。
  • 重复循环直到数据库中的最后一个条目。

  • 谢谢

    最佳答案

    如果您想创建一个同步作业,您需要使用 CountDownLatch 类(代码中有注释)。

    CountDownLatch 是一个同步对象,可以在这种情况下使用。

    至于现在没有一个有效的方法来拥有同步工作人员。

    当您想使用返回有用信息(例如状态)的 Livedata 从您的应用程序监控工作人员本身时,可监听工作人员非常有用。
    如果我没记错的话,标准的 Worker 类也来自 Listenable worker ,所以你可以使用它。

    在您的情况下,有两个工作人员很有用:第一个应用 FFMPEG 命令,第二个工作人员使用此命令的输出进行网络上传。将这两个操作分开可以让您有更多的时间来完成这两个工作(10 + 10)。

    在您的情况下,您可以为第一个 worker 做这样的事情:

     private final CountDownLatch syncLatch = new CountDownLatch(1);
    ...ctor
    doWork(){

    //your asyncronous call
    ...
    @Override
    public void onFinish() {
    //you need to save error status into a onSuccess and onFailure
    syncLatch.countDown();

    }
    ...
    //end


    syncLatch.await();

    ...
    //evaluate if there are errors
    ...
    //create output to pass to the next worker
    Data outputData = ...
    //pass the result to second worker, remember that onfailure will stop all subsequent workers
    if(error==true)
    {

    return Result.failure(outputData);
    }else{
    return Result.success(outputData);
    }
    }

    对于第二个工作人员,您可以根据您的上传功能行为执行相同的操作以同步调用。

    希望这有帮助。

    干杯。

    关于android - 在 Android 中,在 WorkManager 的 Worker 类中运行异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412404/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com