2015-05-25 1 views
0

Обработчик Android удаляет предыдущее сообщение отправки из очереди сообщений обработчика. Запомнить Я не хочу использовать removeCallbacks (Runnable r);Обработчик Android удалить отправить сообщение не работает

Отправить широковещательные намерения
- Для того, чтобы отправить сообщение

 Intent i = new Intent(my_action); 
     sendBroadcast(i); 

- отменить любое предыдущее сообщение

Intent i = new Intent(my_action); 
i.putExtra("a","a"); 
sendBroadcast(i); 

public class TestBroadCast extends BroadcastReceiver { 

    Handler h = new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      // Do my stuff 
     } 
    }; 
    Message msg = h.obtainMessage(); 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if ("a".equals(intent.getStringExtra("a"))){ 
      // Handle intent to cancel message 
      msg.what = 1; 
      h.removeMessages(1); 
     } else { 
      // Handle intent to do my stuff 
      msg.what = 1; 
      h.sendMessageDelayed(msg, 10000); 
     } 
    } 
} 

Но после этого removeMessages не работает.

ответ

0

Вы не можете повторно использовать Message Я пробовал это в прошлом, и он не работает, вы должны получить новый.

Снимите:

Message msg = h.obtainMessage(); 

Изменить:

else { 
     // Handle intent to do my stuff 
     Message msg = h.obtainMessage(); 
     msg.what = 1; 
     h.sendMessageDelayed(msg, 10000); 
    } 

Вы также должны сделать свой Handler статический, я подозреваю, что является причиной ваших проблем. BroadcastReceiver может быть короткой жизнью и быть создан и уничтожен до того, как ваш обработчик выстрелил.