handler pause and resume

在某些特定的情况下,我们可能需要暂停处理MessageQueue中的Message,然后恢复。可以通过一下方法来解决:

自定义Handler,复写handleMessage方法,在方法中添加标记位来控制暂停和开始:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class extends Handler {
Stack<Message> s = new Stack<Message>();
boolean is_paused = false;
public synchronized void pause() {
is_paused = true;
}
public synchronized void resume() {
is_paused = false;
while (!s.empty()) {
sendMessageAtFrontOfQueue(s.pop());
}
}
public void handleMessage(Message msg) {
if (is_paused) {
s.push(Message.obtain(msg));
return;
}else{
super.handleMessage(msg);
// ...
}
}
//...
}