Android处理程序从处理程序消息队列中删除先前的发送消息。 记住我不想使用tableRemoved
(removeCallbacks
r);
发送广播意图
- 发送消息
Runnable
- 取消之前的任何讯息
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);
}
}
}
无效。
答案 0 :(得分:1)
你不能重复使用bootstrap-rails
过去尝试过的Message
并且它不起作用,你应该获得一个新的。{/ p>
卸下:
Message msg = h.obtainMessage();
修改:
else {
// Handle intent to do my stuff
Message msg = h.obtainMessage();
msg.what = 1;
h.sendMessageDelayed(msg, 10000);
}
你也应该让你的Handler
静态,我怀疑这是你的问题的原因。 BroadcastReceiver
可能是短暂的生命,并且在你的处理程序触发之前被创建和销毁。
答案 1 :(得分:0)
您应将处理程序移至Application类,原因如下:
您的BroadcastReceiver每次在广播后都会创建多个处理程序实例,因此Message.target分配了与h.obtainMessage()不同的Handler实例。因此,在选中Message.target之后,Handler.removeMessages()将无法删除消息。 以下是有关Messagequeue.removeMessages()和检查目标处理程序的相关源代码:
while (p != null && p.target == h && p.what == what
&& (object == null || p.obj == object)) {
Message n = p.next;
mMessages = n;
p.recycleUnchecked();
p = n;
}