Правильный способ использования JobService для запуска службы - PullRequest
0 голосов
/ 15 мая 2018

Я создаю JobService. Этот JobService должен запускать службу каждые 5 секунд. Но если служба уже запущена, я не должен ее запускать. Теперь это мой JobService:

public class BleJobService extends JobService {
    JobParameters params;
    DoItTask doIt;
    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        this.params = jobParameters;
        Log.d("TestService", "Work to be called from here");
        doIt = new DoItTask();
        doIt.execute();
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        Log.d("TestService", "System calling to stop the job here");
        if (doIt != null)
            doIt.cancel(true);
        return false;
    }

    private class DoItTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPostExecute(Void aVoid) {
            Log.d("DoItTask", "Clean up the task here and call jobFinished...");
        jobFinished(params, true);

            super.onPostExecute(aVoid);
        }
        @Override
        protected Void doInBackground(Void... params) {
            Log.d("DoItTask", "Working here...");
            startService(new Intent(getApplicationContext(), BlePowerService.class));
            return null;
        }
    }
}

В моей деятельности это код для запуска JobService:

JobInfo jobInfo;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            jobInfo = new JobInfo.Builder(1, componentName)
                    .setMinimumLatency(5000)
                    /*.setExtras(bundle)*/.build();
        } else {
            jobInfo = new JobInfo.Builder(1, componentName)
                    .setPeriodic(5000)
                    /*.setExtras(bundle)*/.build();
        }
        jobScheduler.schedule(jobInfo);

Но этот код не работает, потому что Служба запускается два раза, а затем Задания не выполняют задачу.

...