2012-03-14 7 views
0

バックグラウンドでJmDNSサービスを自動的に更新しようとしています。私がしようとすると、何も起こりません:アクティビティで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(); 
} 

通常ボタンがしかし、私はそれが自動になりたいクリックされたときにコールを取得します。 resfreshServices()を呼び出すResfreshボタンを押さない限り、このコードは何もしません。私はスレッドでそれを試してみましたが、アクティビティは終了し、アプリも終了します。何か案は?

答えて

0

まず、コードに少しコメントします。なぜ3つの異なる方法で同じコードを3回実装していますか?私はあなたがアンドロイドをプログラミングしていると仮定します(あなたのメソッド名にloking)。メソッドonresumeは、アクティビティの開始または再開のたびに実行されます。このトピックの詳細については、this linkを参照してください。

Ok ... then ScheduledExecutorServiceについて詳しく知りましたか?

jmdnsの問題が発生しました。 jmDnsライブラリには、サービスを更新する機能が組み込まれています。新しいサービスが利用可能になったら、新しいサービスを聴いたり、適切な措置を講じることができます。私は、サービスの繰り返しの投票が適切なアプローチであるとは思わない。

hereをご覧になり、アンドロイドでjmdnsを使用するためのチュートリアルをご覧ください。

関連する問題