2017-02-05 25 views
0

Я знаю, как пользователю обработчик или таймер/нить/т. Д. Вы вызываете обработчик и начинаете/останавливаете его там, где это необходимо в коде. Как правило, обработчик будет запускать определенный код снова и снова, пока он не будет остановлен. Мне интересно, есть ли способ запустить другой код для каждого исполнения. Один из способов, о котором я думал, - это сделать следующее.Выполнение другого кода для каждого обработчика/выполнения таймера/потока

Handler h = new Handler(); 
int delay = 1000; //milliseconds 
int handlerCount = 0; 

h.postDelayed(new Runnable(){ 
    public void run(){ 
     //update handler count 
     handlerCount = handlerCount + 1; 
     if (handlerCount ==1) { 
      //run code 1 
     } 
     if (handlerCount ==2) { 
      //run code 2 
     } // etc. 
     h.postDelayed(this, delay); 
    } 
}, delay); 

Или, если вам нужно сделать другой код каждый другой раз, вы могли бы сделать

if (handlerCount%2 == 0) { 
    //Do first function 
} else {// do second function} 

Это лучший способ сделать это? Это не кажется очень чистым, но он отлично работает, поэтому мне интересно, есть ли лучшие способы сделать это.

ответ

0

Вы можете сделать как этот

Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
      case case1: 
       //ops for case1 
       break; 
     } 
    } 
}; 

Затем отправить сообщение Handler использовать следующий код

handler.obtainMessage(what, arg1, arg2, dataobj) 
//what - integer to identify this message 
//arg1 - optional integer argument1 
//arg1 - optional integer argument2 
//dataobject - optional data object to be passed 
+0

Это только для сообщений? Или вы можете поставить общий код, например textView.setText («текст») ;? –

+0

да, вы можете добавить и общий код. потому что это обработчик для основной нити – arjun

+0

Я сделал спасибо !!! –