Как можно создать 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,

Я надеюсь, что этот ответ удовлетворит ваш вопрос и поможет.

Другие вопросы по тегам