可以使用WorkerFactory来创建Worker,这样就可以避免调用Application.onCreate。例如:
// 创建一个自定义的Worker public class MyWorker extends Worker { public MyWorker(Context context, WorkerParameters params) { super(context, params); }
@NonNull
@Override
public Result doWork() {
// 进行后台任务
return Result.success();
}
}
// 定义一个自定义的WorkerFactory public class MyWorkerFactory implements WorkerFactory { @NonNull @Override public Worker createWorker(@NonNull Context appContext, @NonNull String workerClassName, @NonNull WorkerParameters workerParameters) { if (workerClassName.equals(MyWorker.class.getName())) { // 使用自定义的Worker return new MyWorker(appContext, workerParameters); } // 如果Worker类名不匹配,则返回null,让其他的WorkerFactory处理 return null; } }
// 在Application中注册WorkerFactory public class MyApplication extends Application { @Override public void onCreate() { super.onCreate();
// 注册自定义的WorkerFactory
Configuration configuration = new Configuration.Builder()
.setWorkerFactory(new MyWorkerFactory())
.build();
WorkManager.initialize(this, configuration);
}
}
使用WorkerFactory创建Worker可以避免调用Application.onCreate,但是需要在Application中注册自定义的WorkerFactory。然后就可以在需要使用Worker的地方通过WorkManager.enqueue()方法来启动Worker。