使用多个 worker 执行相同的输入任务还是一个 worker 多次执行输入任务更好?

Is it better to use multiple workers that perform the same task for inputs or one worker that performs the task multiple times for inputs?

使用多个 worker 对输入执行相同的任务还是一个 worker 对输入执行多次任务更好?

1 名工人:

\\ SomeWorker.class
    @NonNull
    @Override
    public Worker.Result doWork() {
        Context applicationContext = getApplicationContext();
        boolean success = Boolean.TRUE;
        List<String> resourceUris = new ArrayList<String>(has a list of strings);

        for (String resourceUri : resourceUris) {
            success = doSomething(resourceUri);
        }

        return success ? Result.success() : Result.retry();
    }

\\ Viewmodel.class

OneTimeWorkRequest save = new OneTimeWorkRequest.Builder(SomeWorker.class)
                .addTag(TAG_OUTPUT)
                .build();
workManager.beginUniqueWork(save).enqueue();

多名工人独立完成一项任务:

\\ Someworker.class
    @NonNull
    @Override
    public Worker.Result doWork() {
        Context applicationContext = getApplicationContext();
        String resourceUri = getInputData().getString("RESOURCE_URI");
        return doSomething(resourceUri) ? Result.success() : Result.retry();
    }


\\ Viewmodel.class

List<String> resourceUris = new ArrayList<String>(has a list of strings);
List<OneTimeWorkRequest.Builder> someBuilder;
for (int i = 0; i < resourceUris.size(); i++) {
           someBuilder.add( new OneTimeWorkRequest.Builder(Someworker.class));
}

workManager.beginUniqueWork(someBuilder).enqueue();

似乎第一种方法会消耗更少的内存,但会花费更长的时间,而第二种方法会由于更多的工作管理器而消耗更多的内存,但会花费更短的时间。

视情况而定。

我会说使用一个 Worker 除非你知道你可能 运行 在 10 分钟的执行期间 window,或者如果你知道有部分 Worker 独立有用(即可从应用程序的其他部分重复使用)。