Метод WorkManager onStopped () вызывается дважды - PullRequest
0 голосов
/ 06 ноября 2018

Я реализовал 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();
}


}

1 Ответ

0 голосов
/ 06 ноября 2018

Если я вас правильно понимаю, вы хотите отправить трансляцию, когда ваша работа будет завершена.

Вы не должны делать это внутри onStopped, переместите его на doWork следующим образом:

public Result doWork() {

  startGettingData(); // this method should be synchronous

  Intent intent=new Intent(SERVER_SYNC_BROADCAST);
  intent.putExtra(SYNC_RESULT_MESSAGE,responseCodes);
  LocalBroadcastManager.getInstance(MyApplication.getContext()
        .getApplicationContext())
        .sendBroadcast(intent);

  return Result.SUCCESS;
}

Метод onStopped предназначен не для вызова, когда работа выполнена, а когда она остановлена ​​или отменена.

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...