Я реализовал WorkManager
в моем проекте. Закончив задание в doWork()
, я позвонил stop(true);
и отправил широковещательную рассылку другому действию в onStopped()
. Все работает нормально, но проблема в том, что onStopped()
вызывается дважды (я проверял, применяя точки останова). В результате BroadcastReceiver
также вызывается дважды.
Я знаю, что WorkManager находится в альфа-стадии. Но на самом деле я не уверен, что это ошибка или я делаю что-то не так. Пожалуйста помоги. Коды следующие:
public Result doWork() {
startGettingData();
stop(true);
return Result.SUCCESS;
}
@Override
public void onStopped(boolean cancelled) {
super.onStopped(cancelled);
Intent intent=new Intent(SERVER_SYNC_BROADCAST);
intent.putExtra(SYNC_RESULT_MESSAGE,responseCodes);
LocalBroadcastManager.getInstance(MyApplication.getContext()
.getApplicationContext())
.sendBroadcast(intent);
}
Вызов из номера onCreate()
только один раз:
WorkUtil.startSyncing(SyncWorker.class);
WorkUtil.java
public class WorkUtil {
private static WorkManager mWorkManager;
public static WorkUtil workUtil;
private WorkUtil() {
mWorkManager = WorkManager.getInstance();
}
public static WorkUtil getInstance() {
if(workUtil == null) {
workUtil = new WorkUtil();
}
return workUtil;
}
public static void startSyncing(Class workerClass) {
Constraints constraints = new Constraints.Builder().build();
OneTimeWorkRequest someWork = new OneTimeWorkRequest.Builder(workerClass)
.setConstraints(constraints)
.build();
OneTimeWorkRequest oneTimeWorkRequest = someWork;
mWorkManager.enqueue(oneTimeWorkRequest);
}
public static void cancelAllWork() {
mWorkManager.cancelAllWork();
}
}