2013-09-19 1 views
1

Помните опечатки, просто макет.Отменить handler.postdelayed от другого действия, в котором он не был создан

class myActivity1 extends Activity 
{ 
oncreate() 
    { 
    Handler myHandler = new Handler(); 
    myHandler.postDelayed(myRunnable,1000) 
    } 

onPause() 
    { 
    } 
} 

Обработчик выполняет свою работу, и через 1 секунду запускается myRunnable. Предполагая, что я вызываю другой postDelayed внутри моего myRunnable, который перезапускает postDelayed для повторения.

В myActivity1 я не использую функцию removeCallbacks(), поэтому myHandler будет работать, даже если я оставлю действие.

Однако, мой вопрос: КАК Я МОГУ ОТМЕНИТЬ myHandler из другой деятельности, к которой я переехал? (Предположим, что мое приложение имеет 15 Активности, и я не знаю, внутри которого один я.)

ответ

2

Создать класс Singelton как: -

public class MyHandler { 
    private static Handler handler; 

    public static Handler getHandler() { 
     if (handler == null) { 
      initHandler(); 
     } 
     return handler; 
    } 

    private static void initHandler() { 
     handler = new Handler(); 
     handler.postDelayed(myRunnable,1000); 
    } 

    public static void stopMyHandler() { 
     handler.removeCallbacksAndMessages(null); 
    } 

    public static void pauseMyHandler(Runnable myRunnable) { 
     handler.removeCallbacksAndMessages(myRunnable); 
    } 

    public static void resumeMyHandler(Runnable myRunnable) { 
     handler.postDelayed(myRunnable,1000); 
    } 
} 

Используйте MyHandler.getHandler(), чтобы запустить его и MyHandler.stopMyHandler(), чтобы остановить его в любой Мероприятия.

В вашем Activity классе: -

@Override 
    public void onPause() 
    { 
     super.onPause(); 
     MyHandler.pauseMyHandler(myRunnable); 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     MyHandler.resumeMyHandler(myRunnable); 
    } 

Код для Runnable, который работает на UI потоке: -

runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       //update your UI 
      } 
    }); 
+0

всякий раз, когда я использую stopMyHandler, когда пользователь нажал на кнопку домой, например, что лучшая стратегия, чтобы она продолжалась внутри onResume(), когда пользователь снова начинает действие? Я планирую использовать значение boolean, которое остановилось, и включите и выключите его и проверьте его внутри каждого приложения onResume() моего приложения. – tony9099

+0

Я думаю, что ваш ответ в этом [сообщение] (http://stackoverflow.com/questions/4428860/android-pausing-and-resuming-handler-callbacks) –

+0

не могли бы вы уточнить ???? – tony9099

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