2012-03-14 3 views
0

백그라운드에서 JmDNS 서비스를 자동으로 새로 고치려고합니다. 내가하려고 할 때 아무것도 발생하지 않습니다 :활동중인 JmDNS 서비스를 자동 새로 고침

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

일반적으로 버튼 그러나 클릭 나는 그것이 자동을 찍고 싶을 때 전화를 가져옵니다

@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() 방법이다. 이 코드는 resfreshServices()를 호출하는 Resfresh 버튼을 누르지 않으면 아무런 일도하지 않습니다. 스레드로 시도해 보려고했지만 활동이 끝나고 앱도 닫힙니다. 어떤 아이디어?

답변

0

먼저 코드에 약간의 설명이 있습니다. 세 가지 다른 방법으로 같은 코드를 세 번 구현하는 이유는 무엇입니까? 난 당신이 프로그래밍 안드로이드 (귀하의 메서드 이름에 loking) 있다고 가정합니다. 메소드 onresume은 활동이 시작되거나 재개 될 때마다 실행됩니다. 이 주제에 대한 자세한 내용은 this link을 참조하십시오.

Ok, then ... ScheduledExecutorService에 대한 자세한 내용은 문서를 이미 확인 했습니까?

이제 jmdns 문제입니다. jmDns 라이브러리에는 서비스를 업데이트하는 기능이 있습니다. 새로운 서비스를 청취하고 새로운 서비스를 사용할 수있을 때 적절한 조치를 취할 수 있습니다. 나는 서비스의 반복 된 폴링이 올바른 접근이라고 생각하지 않는다.

here에서 안드로이드의 jmdns 사용에 대한 자습서를보십시오.