문제

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();
}
.

일반적으로 버튼을 클릭 할 때 호출이 발생하지만 i를 자동으로 사용할 수 있습니다.이 코드는 ResFreshServices ()를 호출하는 RESFRESH 버튼을 누르지 않으면 아무 것도하지 않습니다.나는 스레드로 그것을 시도하려고 시도했지만 활동은 닫히고 앱도 마셔야합니다.어떤 아이디어도 있습니까?

도움이 되었습니까?

해결책

먼저 코드에 대해 약간의 코멘트를 작성합니다. 왜 세 가지 다른 방법으로 동일한 코드를 세 번 구현하고 있습니까? 나는 당신이 안드로이드를 프로그래밍하고 있다고 가정합니다 (당신의 방법 이름에서 loking). Method OnResume은 활동이 시작되거나 다시 시작될 때마다 실행됩니다. 이 주제에 대한 자세한 내용은이 링크 확인, 그런 다음 ... scheduledexecutorservice ?

이제 JMDNS 문제가 발생합니다. JMDNS 라이브러리에는 서비스를 업데이트하는 기능이있는 빌드가 있습니다. 새로운 서비스를 사용할 수있을 때 새로운 서비스를들을 수 있으며 적절한 조치를 취할 수 있습니다. 나는 생각하지 않으며, 서비스의 반복적 인 투표는 올바른 접근 방식이다.

Android에서 JMDN을 사용하는 것에 대해 약간의 자습서를 위해

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top