2015-05-25 63 views
0

Android處理程序從處理程序消息隊列中刪除先前發送的消息。 請記住我不想使用removeCallbacksRunnable 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可能是短暫的生命,並在你的處理程序觸發之前被創建並銷燬。

相關問題