Вопрос

Я пытаюсь автоматически обновлять услуги JMDNS на заднем плане.Ничего не происходит, когда я пытаюсь:

@Override
public void onDestroy() {
    try {
        hiNeighborService.unregisterListener(this);
        this.unbindService(this.serviceConnection);

    } catch (Exception ex) {
        Log.e(LOG_TAG, "Exception occur during destroying the app.");
    }

    super.onDestroy();
}

@Override
public void onStart() {
    /*new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                refreshServices();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 

    }).start();*/

    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

    // This schedule a runnable task every 2 minutes
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
      public void run() {
        rebindService();
        refreshServices();
      }
    }, 0, 1, TimeUnit.SECONDS);


    super.onStart();
}

@Override
public void onRestart() {
    /*new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                refreshServices();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 

    }).start();*/
    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

    // This schedule a runnable task every 2 minutes
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
      public void run() {
        rebindService();
        refreshServices();
      }
    }, 0, 1, TimeUnit.SECONDS);

    super.onRestart();
}

@Override
public void onResume() {
    /*new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                refreshServices();
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } 

    }).start();*/

    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

    // This schedule a runnable task every 2 minutes
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
      public void run() {
        rebindService();
        refreshServices();
      }
    }, 0, 1, TimeUnit.SECONDS);

    super.onResume();
}
.

Это мой метод ResfreshServices ():

private void refreshServices() {
    Log.i(LOG_TAG, "Refresh available neighbors...");
    final List<Neighbor> activeNeighbors = this.hiNeighborService
            .getActiveNeighbors();
    Log.d(LOG_TAG, activeNeighbors.size() + " active neighbors are found!");

    new Thread(new Runnable() {
        public void run() {
            Log.i(LOG_TAG, "refresh UI...");
            try {

                synchronized (activeNeighborsViewModel) {
                    activeNeighborsViewModel.clear();
                    for (Neighbor neighbor : activeNeighbors) {
                        NeighborViewModel vm = new NeighborViewModel(
                                neighbor);
                        vm.setNeighborUnreadCount(ConnectActivity.this
                                .getUnreadMessageCount(neighbor));
                        if (activeNeighborsViewModel.contains(vm)) {
                            activeNeighborsViewModel.remove(vm);
                        }

                        activeNeighborsViewModel.add(vm);
                    }
                }
                notifyServiceListChanged();

                Log.i(LOG_TAG, "refresh completed!");
            } catch (Exception ex) {
                ex.printStackTrace();
                Log.e(LOG_TAG, ex.toString());
            }
        }
    }).start();
}
.

Обычно получает вызов, когда кнопка нажала, однако я хотел бы, чтобы она была автоматической.Этот код ничего не делает, если я не ударю кнопку Resfresh, которая вызывает ResFreshServices ().Я попытался попробовать его с нитями, но активность закрывается и так и приложение.Любые идеи?

Это было полезно?

Решение

Первый немного комментарий к вашему коду. Почему вы реализуете тот же код три раза в трех разных методах. Я предполагаю, что вы программируете Android (Loking на именах ваших методов). Способ OnResume выполняется каждый раз, когда активность запускается или возобновляется. Смотрите Эта ссылка для получения дополнительной информации на эту тему.

Хорошо, тогда ... вы уже проверили документы для получения дополнительной информации о ПланируютЭкселексуалСервис ?

Теперь для выпуска JMDNS. Библиотека JMDNS имеет функциональность для обновления услуг. Вы можете прослушать новые услуги и принять соответствующие действия, когда новые услуги доступны. Я не думаю, что повторное опрос услуг является правильным подходом.

Посмотрите Здесь для небольшого руководства по использованию JMDNS в Android.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top