Android, detención y reanudación de devoluciones de llamadas del manejador
Tengo un manejador que estoy usando de la siguiente manera:
handler.postDelayed(Play, 1000);
Cuando se llama a mi aplicación onPause () antes de hacer esto, necesito pausarlo y decirle que no realice el "postDelayed" hasta que reanude.
- Android: desea que la aplicación realice tareas cada segundo
- Problema en Handler con mensajes en android
- Android: utilizar el controlador post.delayed dos veces
- Desarrollo de controladores Android
- PostAtTime no desencadena
¿Es esto posible, o hay una manera alternativa?
Mi problema es que cuando onPause () se llama pausa el audio (SoundManager), pero si este handler.postDelayed se llama después de eso, el audio no se detendrá y continuará jugando con mi aplicación en segundo plano.
@Override public void onPause() { Soundmanager.autoPause() }
Pero después el postDelayed después de 1000ms comienza el jugar audio otra vez.
- Esta clase de manejador debe ser estática o pueden producirse fugas
- Manejador o temporizador android
- Cómo detener el temporizador handler.postDelayed () en Android
- Android no puede crear el controlador dentro del subproceso que no ha llamado looper.prepare ()
- Prueba de Android Handler.postDelayed
- No se puede instalar el controlador USB de Android en Windows 7
- Android delay using handler
- No hay controlador para Asus MeMO Pad para hacer la depuración de aplicaciones con eclipse
¿Has probado con:
@Override public void onPause() { handler.removeCallbacks(Play); Soundmanager.autoPause() }
Ale
Necesita subclasificar el Handler
e implementar los métodos de pausa / reanudación de la siguiente manera (luego simplemente llame a handler.pause()
cuando quiera pausar el manejo de mensajes y llame a handler.resume()
cuando desee reiniciarlo):
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 // ... } } //... }