Android Periodic WorkManager не запускается - PullRequest
0 голосов
/ 07 мая 2019

Эта периодическая задача диспетчера работ не выполняется. Для тестирования я сократил метод googleFitHelper.syncData ниже, чтобы он имел доступ только к URL (посту) с использованием Volley фреймворка.

manifest имеет набор android.permission.INTERNET. У manifest нет других параметров, связанных с задачей workmanager.

Для проверки я пишу журнал на сервере при обращении к URL.

Я что-то упустил?

Примечание. Задача работает, как ожидается, как OneTimeWorkRequest.

class MainActivty {
    ...

    private void scheduleSyncJobService(){
        SyncWorkManagerUtility syncWorkManagerUtility = new SyncWorkManagerUtility();
        syncWorkManagerUtility.scheduleJob();
    }
}



class SyncWorkManagerUtility {
    private static final String TAG = SyncWorkManagerUtility.class.getSimpleName();
    private static final String SYNC_WORK_JOB1 = "SYNC_WORK_JOB1";

    void scheduleJob() {
        Constraints constraints = new Constraints.Builder()
        .setRequiresDeviceIdle(true)
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build();

    PeriodicWorkRequest syncRequest =
        new PeriodicWorkRequest.Builder(SyncWorkManagerService.class, 15, TimeUnit.MINUTES)
            .addTag(SYNC_WORK_JOB1)
            .setConstraints(constraints)
            .build();
            Log.d(TAG, "Scheduling Job " + SYNC_WORK_JOB1);
            WorkManager.getInstance().enqueueUniquePeriodicWork(SYNC_WORK_JOB1, ExistingPeriodicWorkPolicy.REPLACE, syncRequest);
    }
}


public class SyncWorkManagerService extends Worker {
    ...

    @Override
    public Result doWork() {
        GoogleFitHelper googleFitHelper = new GoogleFitHelper(getApplicationContext());
        googleFitHelper.syncData();
        return Result.success();
    }
}

public class GoogleFitHelper {
    ....

    void syncData(){
        String url="https://example.com/testbackgroundtask.php";
        StringRequest strRequest = new StringRequest(Request.Method.POST, url,
        responseString -> {},
        error -> {}) {

            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("testdataA", "testdataA");
                params.put("testdataB", "testdataB");
                return params;
            }

            @Override
            public Map<String, String> getHeaders() {
                HashMap<String, String> headers = new HashMap<>();
                headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
                return headers;
            }

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                return super.parseNetworkResponse(response);
            }
    };
    VolleyRequestQueue.getInstance(context).addToRequestQueue(strRequest);
}

1 Ответ

0 голосов
/ 08 мая 2019

Вы делаете асинхронный запрос в синхронном Worker.Попробуйте вместо этого использовать ListenableWorker.

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