Android рабочий менеджер PeriodicWorkRequest не работает - PullRequest
0 голосов
/ 24 июня 2019

Я хочу установить периодическое задание, которое будет выполняться через каждые x часов (не ровно x часов, а минимум x часов).Это необходимо сделать даже после того, как основное действие моего приложения будет уничтожено или после перезагрузки устройства.Так что в соответствии с документами разработчика Android, я выбрал класс менеджера работы для того же.Но код не работает после первого выполнения.Мой код: -

(я использую enqueueUniquePeriodicWork, чтобы избежать нескольких запросов)

В основной деятельности по созданию: -

    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();


    PeriodicWorkRequest uploadWorkRequest = new PeriodicWorkRequest.Builder(UploadWorker.class,16, TimeUnit.MINUTES)
            .setBackoffCriteria(
                    BackoffPolicy.LINEAR,
                    OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
                    TimeUnit.MILLISECONDS)
            .addTag("workerTest")
            .setConstraints(constraints)
            .build();

    WorkManager.getInstance().enqueueUniquePeriodicWork("mytag", ExistingPeriodicWorkPolicy.REPLACE, uploadWorkRequest);

В загрузке

public class UploadWorker extends Worker {

public UploadWorker(
        @NonNull Context context,
        @NonNull WorkerParameters params) {
    super(context, params);

}

@NonNull
@Override
public Result doWork() {

    appendLog(Calendar. getInstance().getTime().toString() + "work manager periodic ");
    Log.d("TAG","work manager dowork callback");
    return Result.success(outputData);
}





public static void appendLog(String text) {
    String fileName = Environment.getExternalStorageDirectory() + "/" + "mylogs.txt";

    File logFile = new File(fileName);
    if (!logFile.exists())
    {
        try
        {
            logFile.createNewFile();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            Log.d("TAG","Error:- "+e.toString());
            e.printStackTrace();
        }
    }
    try
    {
        //BufferedWriter for performance, true to set append to file flag
        BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
        buf.append(text);
        buf.newLine();
        buf.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        Log.d("TAG","Errors:- "+e.toString());
        e.printStackTrace();
    }
}

Что не так с моим кодом?Почему он работает только один раз, а не дальше?

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