Я пытаюсь реализовать WorkManager
для периодической фоновой операции. Я получаю общую ошибку при попытке использовать Handler
в Worker
. Я знаю, что ошибка говорит о том, что мне нужно позвонить Looper.prepare()
, потому что я нахожусь не в том потоке, но я не знаю, как это сделать.
Это код, который я использую:
public class SyncWorker extends Worker {
private static TimeOutHandler mTimeOutHandler;
public SyncWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
mTimeOutHandler = new TimeOutHandler(this);
}
@Override
public Result doWork() {
return Result.success();
}
private static class TimeOutHandler extends Handler {
private final WeakReference<SyncWorker> mMainWeakReference;
//this is where the error is thrown
TimeOutHandler(final SyncWorker service) {
mMainWeakReference = new WeakReference<>(service);
}
@Override
public void handleMessage(final Message msg) {
final SyncWorker service = mMainWeakReference.get();
if (service != null) {
switch (msg.what) {
case MESSAGE_CONNECTIVITY_TIMEOUT:
mTimeOutHandler.removeMessages(MESSAGE_CONNECTIVITY_TIMEOUT);
break;
}
}
}
}
}
Handler handler = new Handler(Looper.getMainLooper());
Я провел некоторые исследования, и одним из предложенных решений является использование:
Handler handler = new Handler(Looper.getMainLooper());
но я не знаю, как сделать это с тем, как я расширяю Handler
.