2015-05-10 2 views
0

В моем приложении я создаю обработчик в действии A, чем пытаюсь закрыть его из действия B. Но обработчик просто не остановится. Вот пользователь senario и код, который я использую;Android: Как остановить обработчик от другой активности?

  1. Пользователь устанавливает уведомление
  2. Уведомление показан и обработчик создан
  3. Пользователь нажмите на уведомление
  4. Другая деятельность открывает
  5. Пользователь вводит кнопку и обработчик останавливается

Это как я пытаюсь это сделать (только обработчик, создающий и останавливающий части, так как остальное неуязвимо).

public class MyAlarmService extends Service { 
    public static Handler handler = new Handler(); 

    public MyAlarmService() { 
    } 
    @Override 
    public IBinder onBind(Intent arg0) 
    { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @SuppressWarnings("static-access") 
    @Override 
    public void onStart(Intent intent, int startId) 
    { 
     super.onStart(intent, startId); 
    handler.postDelayed(runnable, 10000); 
    } 
    static Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      sendmessage(); 
      handler.postDelayed(this, 10000); 
     } 
    }; 
    static public void stopRunnable(){ 
     handler.removeCallbacks(runnable); 
    } 
} 

И вот как я пытаюсь остановить обработчик;

buttonStopCountDownTimer.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       MyAlarmService.stopRunnable(); 
      } 
     }); 
    } 
}); 

Есть ли в любом случае, чтобы достичь этого?

+0

да, использовать что-то вроде 'StartService (новый Intent (...). SetAction (YOUR_ACTION_INT))', то в вашей службе, вы сможете команда прибудете в методе 'onStartCommand()' – deadfish

+0

Это не покажите его в параметрах, когда я пытаюсь поставить stopRunnable вместо YOUR_ACTION_INT – Ashtaroth

ответ

0

Вы можете добиться этого различными способами. Мое любимое занятие:

  1. расширяет класс применения. (не забудьте зарегистрировать его на манифесте).

  2. создать поля вашего MeAlarmService в нем.

  3. создать сеттер и getter в это поле в классе Application.

  4. вызовите сеттер в onCreate() внутри вашего сервиса MyAlarmService.

  5. удалите статическую девицу с вашего stopRunnable() и сделайте ее общедоступной.

  6. , чтобы остановить runnable, просто вызвать getApplication из любого места в приложении, применить его к вашему пользовательскому классу приложений. проверьте, нет ли getMyAlarmService() getter, и вы могли бы вызвать stopRunnable(), если это так.

  7. не забудьте вызвать setter в onDestroy() MyAlarmService и поместить на него нуль.

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