Как планировать задачу на каждый определенный период времени - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь использовать JobScheduler, как показано ниже, я хотел бы планировать задачу каждые 1500 миллисекунд.Когда я запускаю приведенный ниже код, я получаю в logCat следующее:

E/JobServiceContext: Time-out while trying to bind com.example.pc_amr.twittertrendsnearlocation/.ActMain$JobSchedulerService jId=1, u0, dropping.

ПРИМЕЧАНИЕ: JobSchedulerService создается внутри действия ActMain

. Пожалуйста, дайте мне знать, как запланировать задачукаждые 11500 миллисекунд правильно и как исправить эту ошибку

манифест :

 <service
        android:name=".services.TwitterTrendsAPIService"
        android:exported="false"
        android:enabled="true"/>
 <service
        android:name=".ActMain$JobSchedulerService"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="true"/>

код :

this.mJobScheduler = (JobScheduler) getApplicationContext().getSystemService(JOB_SCHEDULER_SERVICE);
    this.mComponentName = new ComponentName(this, JobSchedulerService.class);
    JobInfo jobInfoObj = new JobInfo.Builder(1, this.mComponentName).setPeriodic(1500).build();
    this.mJobScheduler.schedule(jobInfoObj);
    ...
    ...
    ...
    public class JobSchedulerService extends JobService {

   public JobSchedulerService() {
        super();
    }

    @Override
    public boolean onStartJob(JobParameters params) {
        Log.w(TAG, SubTag.bullet("onStartJob"));
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.w(TAG, SubTag.bullet("onStartJob"));
        return true;
    }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Во-первых, JobScheduler имеет минимальный период ~ 15 минут или около того.Вы не можете использовать JobScheduler для выполнения работы каждые 1,5 секунды.

Во-вторых, ваш JobScheduler является вложенным классом внутри действия.Это не будет работать.Вам может понадобиться класс static или отдельный класс.

Периодически вы можете работать с вашим пользовательским интерфейсом различными способами, например:

  • postDelayed() на View
  • RxJava Observable.interval()
  • ScheduledExecutorService

Уместность любого из них зависит от работы, которую вы искалиделать.

0 голосов
/ 26 августа 2018

Поскольку это всего 11500 мс, лучший ответ - использовать обработчик:

Handler handler = new Handler();
int delay = 11500 ; //milliseconds

handler.postDelayed(new Runnable(){
    public void run(){
        //ur code here
        handler.postDelayed(this, delay);
    }
}, delay);
...