Ham*_*mid 12 android callback handler
我有一个处理程序,我使用如下:
handler.postDelayed(Play, 1000);
Run Code Online (Sandbox Code Playgroud)
当我的应用程序onPause()在完成之前被调用时,我需要暂停它并告诉它不要执行"postDelayed"直到我恢复.
这是可能的,还是有另一种方式?
我的问题是,当调用onPause()时,我暂停音频(SoundManager),但如果此后调用此handler.postDelayed,音频将不会暂停,并将继续在后台播放我的应用程序.
@Override
public void onPause()
{
Soundmanager.autoPause()
}
Run Code Online (Sandbox Code Playgroud)
但是1000ms后的postDelayed再次启动音频播放.
Cpn*_*nch 19
您需要Handler按如下方式子类化并实现暂停/恢复方法(然后handler.pause()在您想要暂停消息处理handler.resume()时调用,并在需要重新启动时调用):
class MyHandler 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());
}
}
@Override
public void handleMessage(Message msg) {
if (is_paused) {
s.push(Message.obtain(msg));
return;
}else{
super.handleMessage(msg);
// otherwise handle message as normal
// ...
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
ggo*_*eze 14
你尝试过:
@Override
public void onPause()
{
handler.removeCallbacks(Play);
Soundmanager.autoPause()
}
Run Code Online (Sandbox Code Playgroud)
GER
修改CpcCrunch给出的答案。那里的handleMessage对我不起作用,所以用dispatchMessage代替它。注意:以下代码是用 Kotlin 编写的:
class CustomHandler: Handler() {
var s = Stack<Message>()
var is_paused = false
@Synchronized
fun pause() {
is_paused = true
}
@Synchronized
fun resume() {
is_paused = false
while (!s.empty()) {
sendMessageAtFrontOfQueue(s.pop())
}
}
override fun dispatchMessage(msg: Message?) {
if (is_paused) {
s.push(Message.obtain(msg))
return
} else {
super.dispatchMessage(msg)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15716 次 |
| 最近记录: |