2012-03-21 4 views
0

у меня есть этот IntentService код, запустить услугу один раз:Android функция работает несколько раз в IntentService

protected void onHandleIntent(Intent intent) { 
    final ResultReceiver receiver = intent.getParcelableExtra("receiver"); 
    String command = intent.getStringExtra("command"); 
    Bundle b = new Bundle(); 
    b.putString("results", results); 
    if(command.equals("query")) { 
     receiver.send(1, Bundle.EMPTY); 
     try {     
      results = sendGetMessage(); 
      b.putString("results", results); 
      receiver.send(2, b); 
     } catch(Exception e) { 
      b.putString(Intent.EXTRA_TEXT, e.toString()); 
      receiver.send(0, b); 
     }  
    } 
    this.stopSelf(); 
    Log.d("ServiceFinished", "ServerConnection.java Service has finished"); 
} 

я хочу, чтобы моя функция sendGetMessage(), чтобы запустить несколько раз каждые 5 секунд, пока я не остановить службу .. как я могу сделай это ?

ответ

3

Вы хотите поместить его в свою нить и зацикливать навсегда.

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
     try { 
      while(true) { 
       Thread.sleep(5000); // for the 5 seconds requirement 
       results = sendGetMessage(); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

thread.start(); 
+0

Извините, забыл о том, что я хочу, чтобы каждый раз повторялся каждые 5 секунд .. –

+0

Это тоже плохое решение: система может решить убить вашу нить в конце концов ... –

+0

@AsafNevo, я добавил строку, которая позволит ей каждые 5 секунд. – ajacian81

0

Существует много альтернатив, но я предпочитаю использовать ScheduledExecutorService. См. Пример кода ниже:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1); 

// This schedule a task to run every 5 seconds: 
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
    // Do the actual job: 
    results = sendGetMessage(); 

    // In case if you need update UI, simply do this: 
    runOnUiThread(new Runnable() { 
     public void run() { 
     // update your UI component here. 
     myTextView.setText("refreshed"); 
     } 
    }); // end of runOnUiThread 
    } 
}, 0, 5, TimeUnit.SECONDS); 

Не забудьте закончить/закрыть свою работоспособную задачу должным образом, прежде чем прекратить обслуживание.

Смежные вопросы