Как можно создать WorkerParameters
Работника Worker()
является @Deprecated
так нужно использовать
public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
но конструктор WorkerParameters @hide
,
Итак, как можно создать экземпляр WorkerParameters?
Эта библиотека является последней версией библиотеки планирования фоновых задач Android, но эта библиотека недавно обновила API, чтобы пометить старый метод создания основного класса как отброшенный
Теперь я не знаю, как создать этот базовый класс, потому что один из параметров не предоставляет конструктор, и при этом я не нахожу, как работает Factory / Builder.
Итак, позвольте мне посмотреть, есть ли кто-нибудь, кто может помочь мне в большом стековом цветке.
Основной класс - Worker, параметры - WorkerParameters.
1 ответ
Итак, запрос для вас из последней версии библиотеки WorkManager
(зависимость: android.arch.work:work-runtime:1.0.0-alpha09),
Конструктор Theres изменился с
Worker()
в
Worker(@NonNull Context appContext, @NonNull WorkerParameters workerParams)
,
Это означает, что конструктор по умолчанию теперь больше не используется (устарел, помечен как он должен быть удален в будущих версиях) parameterized constructor
,
Теперь, если вы заметили, что когда мы используем наши Worker
мы не создаем напрямую object
из этого, вместо этого мы делаем что-то вроде этого,
OneTimeWorkRequest.from(FooWorker.class) // We pass Class<?> obj of our worker here, or in PeriodicWorkRequest-it's the same
(Проходящий класс Объект нашего Worker
нашим WorkRequest
)
это означает, что WorkParameters
это то, что обеспечивается DefaultWorkerFactory
внутренне. Так что вам не нужно беспокоиться об этом, потому что мы не собираемся создавать новый объект Worker
сами по себе, если вы не хотите никакой индивидуальной настройки (что теперь возможно в этой версии, и это хорошо).
Кроме того, из последних изменений API 19 сентября 2018
- Теперь вы можете создать свой собственный
Worker
экземпляры во время выполнения, указавWorkerFactory
как частьWorkManager.Configuration
, Резервный заводDefaultWorkerFactory
, что соответствует поведению предыдущих версийWorkManager
,- Конструкторы по умолчанию для
Worker
а такжеNonBlockingWorker
теперь помечены как устаревшие. Пожалуйста, используйте новый конструктор(Worker(Context, WorkerParameters))
и позвонитьsuper(Context, WorkerParameters);
будущие версииWorkManager
удалит конструктор по умолчанию
Так вот, это причина того, что этот вопрос все о том, что, если я хочу создать WorkerParameters
?
Ответ в том, что прежде чем вы сможете создать WorkerParameters
вам нужно переопределить поведение по умолчанию WorkManager
библиотека и предоставить свои собственные индивидуальные WorkManager.Configuration
и тем самым создавая свой собственный Worker
, во время выполнения путем предоставления WorkerParameters
к этому. (Это тот случай, когда нам нужно предоставить WorkerParameters, вы можете не захотеть делать это, если вы просто используете функциональные возможности WorkManager из коробки)
Вот пример GoogleCodeLab, который прекрасно объясняет WorkManager
(Вы можете увидеть здесь, как это делается с новым конструктором).
Заключение:
Допустим, у вас есть класс Worker FooWorker
тогда ваш код будет выглядеть так:
public class FooWorker extends Worker {
public FooWorker(
@NonNull Context appContext,
@NonNull WorkerParameters workerParams) {
super(appContext, workerParams);
}
private static final String TAG = FooWorker.class.getSimpleName();
@NonNull
@Override
public Worker.Result doWork() {
// Do some work & return appropriate result.
}
}
и инициализировать так
//Init WorkManager
private WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance();
// Enqueue our work to manager
mWorkManager.enqueue(OneTimeWorkRequest.from(FooWorker.class)); // Here, we're not creating new FooWorker(); & we don't need to worry about `WorkerParameters` for now.
Так что нет никакого случая, чтобы получить доступ / создать конструктор / объект WorkerParamters
,
Я надеюсь, что этот ответ удовлетворит ваш вопрос и поможет.