ScheduledExecutorService не работает на службу привязки в Android - PullRequest
0 голосов
/ 11 октября 2019

У меня есть задача, которая запускается каждые 30 секунд в Android с помощью ScheduledExecutorService. Он выполняет поток пользовательского интерфейса и работает нормально.

Теперь мне нужно, чтобы задача связывала сервис, но когда я добавляю вызов метода bind, задача не запускается каждые 30 секунд;он запускается всегда и приводит к накладным расходам на приложение.

Это код моей задачи:

Runnable consumirDatosDinamicosTask = () -> {

runOnUiThread(new Runnable() {
              @Override
              public void run() {
                  if (mapContenedorDatosInstalacionesDTO != null && itemsGrillaAdapter != null) {

                      ContenedorInstalacionDTO datosInstalacion = mapContenedorDatosInstalacionesDTO.get(idInstalacion);

                      if(datosInstalacion != null){
                          PopuladorInstalacionGrid.popularParametrosDinamicos(instalacionGrilla, itemsGrillaAdapter,
                                  datosInstalacion.getInversoresDTO(), datosInstalacion.getInversoresCargadoresDTO(), datosInstalacion.getReguladoresDTO());
                      }

                  }
                  itemsGrillaAdapter.notifyDataSetChanged();

//Here is the problem. If i uncomment bindearServicio(), the task doesn't run every 30 seconds; it runs always and It produces an overhead.
                  //bindearServicio();
              }
            });

        };

        ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);
        scheduleTaskExecutor.scheduleAtFixedRate(consumirDatosDinamicosTask, 0, 30, TimeUnit.SECONDS);
void bindearServicio() {
        unbindearServicio();

        if (!isBinded) {
            bindService(new Intent(this, InstalacionesService.class), serviceConnection, Context.BIND_AUTO_CREATE);
            isBinded = true;
        }
    }
void unbindearServicio() {
        if (isBinded) {
            unbindService(serviceConnection);
            isBinded = false;
        }
    }

Может ли кто-нибудь помочь мне увидеть, что я делаю неправильно,или скажите, есть ли лучший способ привязывать сервис каждые 30 секунд?

Заранее спасибо:)

...