【发布时间】:2019-03-29 07:26:34
【问题描述】:
我有一个 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 编辑并从数据库中上传和删除。
- 重复循环直到数据库中的最后一个条目。
谢谢
【问题讨论】:
-
RxWorker 它是 ListenableWorker 的子级,并且具有相同的 10 分钟任务长度限制。如果您需要更长时间地运行后台任务,WorkManager 可能不是正确的解决方案。了解您在这里想要实现的目标会有所帮助。
-
好点,任何工人都是 ListenableWoker 的孩子,因此有 10 分钟的限制。我只想上传帖子,上面提到了流程。根据您的建议,最好的解决方案是什么?
-
你可以看看Background processing Guide。在您的特定情况下,前台服务看起来很合适。
-
但是服务没有“网络已连接”等限制。我只想在网络可用时运行它
标签: android ffmpeg rx-java rx-java2 android-workmanager