2010-12-13 14 views
12

que tienen un controlador que estoy usando la siguiente manera:Android, pausar y reanudar el manejador de devoluciones de llamada

handler.postDelayed(Play, 1000); 

cuando mi solicitud onPause() es llamado antes de que esto se hace, tengo que hacer una pausa y no contarla para realizar el "postDelayed" hasta que reanude.

¿Es esto posible, o hay una manera alternativa?

Mi problema es que cuando se llama a OnPause() pause el audio (SoundManager), pero si se llama a este handler.postDelayed después de eso, el audio no se pausará y continuará reproduciéndose con mi aplicación en el fondo .

@Override 
public void onPause() 
{ 
    Soundmanager.autoPause() 
} 

pero luego el mensaje Demolido después de 1000 ms inicia el audio de nuevo.

Respuesta

13

Ha intentado con:

@Override 
public void onPause() 
{ 
    handler.removeCallbacks(Play); 
    Soundmanager.autoPause() 
} 

Ger

+1

Sí, pero si reanudo esto, el sonido de la devolución de llamada nunca comenzó a reproducirse, por lo que no es nada para reanudar. Todavía quiero que reanude ese sonido. (O inicie si aún no ha comenzado). – Hamid

+3

Puede implementar el método onResume y ejecutar allí handler.postDelayed (Play, 1000); – ggomeze

+2

Esto fue hace mucho tiempo, y tengo una gran experiencia con Android desde esta pregunta. Aceptaré esta respuesta porque es correcta en cuanto a que debería eliminar la devolución de llamada al hacer una pausa. – Hamid

16

Es necesario subclase Handler y aplicar métodos de pausa/reanudación de la siguiente manera (a continuación, sólo llamar handler.pause() cuando se quiere hacer una pausa en el manejo de mensajes y llamada 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 
       // ... 
     } 
    } 
    //... 
} 
+2

trabajando, gracias hombre. esta debería ser la respuesta aceptada. –

+0

¿Dónde está el método 'ejecutar' para el hilo? – Si8

+1

No hay método de ejecución. Un controlador no es un hilo separado (se ejecuta dentro de su hilo). – CpnCrunch

Cuestiones relacionadas