2015-02-23 1 views
0

Я реализовал обработчик, который позволяет пользователю запускать событие, которое повторяется каждые 5 секунд, используя меню панели задач. Каков наилучший способ использования, который также позволит пользователю остановить событие из меню панели задач?Остановка работающего обработчика

public class MainActivity extends Activity{ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menuitem_tracklogOn: 
      final Handler handler = new Handler(); 
      Timer t = new Timer(); 
      t.schedule(new TimerTask() { 
       public void run() { 
        handler.post(new Runnable() { 
         public void run() { 
          //DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS... 
          handler.postDelayed(this, 5000);//repeat every n-milliseconds 
         } 
        }); 
       } 
      }, 0);//start after n-milliseconds 
      return true; 

     case R.id.menuitem_tracklogOff: 
     //stops running event from R.id.menuitem_tracklogOn 
     return true; 

Решение:

final Handler handler = new Handler(); 
Timer t = new Timer(); 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menuitem_tracklogOn: 
      t.schedule(new TimerTask() { 
       public void run() { 
        handler.post(new Runnable() { 
         public void run() { 
          //DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS... 
          handler.postDelayed(this, 5000);//repeat every n-milliseconds 
         } 
        }); 
       } 
      }, 2000);//start after n-milliseconds 
      return true; 
     case R.id.menuitem_tracklogOff: 
      t.cancel(); 
      handler.removeCallbacksAndMessages(null); 
      return true; 

ответ

1

Что такое лучший способ использовать это также позволит пользователю остановить событие из меню панели задач?

остановить Handler на menuitem_tracklogOff клик:

1. Отменить Timer по телефону timer.cancel()

2. вызов removeCallbacksAndMessages удалить все обратные вызовы и сообщения:

handler.removeCallbacksAndMessages(null); 

Для доступа s и Timer и Handler Объект снаружи первый case Объявление другой внешний onOptionsItemВыбранный метод или до switch-case Блок.

+0

@ ρяσѕρєя-k- Я разместил ваше внедренное предложение выше ... что мне не хватает? Благодаря! – portsample

+0

@portsample: переместить оба обработчика обработчика обработчика = новый обработчик(); таймер t = новый таймер(); 'строки вне метода' onOptionsItemSelected' –

0

вам нужно вызвать timer.cancel() отменить таймер.

общественного недействительными отменить()// Added in API level 1

Отменяет таймер и все запланированные задачи. Если есть текущая работа, она не затрагивается. На этом таймере не может быть запланировано больше задач. Последующие вызовы ничего не делают.