2011-11-10 17 views
5

Tengo una AsyncTask que se ejecuta antes de pasar a la siguiente actividad. Dentro de esta AsyncTask, tengo un MediaPlayer.¿Qué le sucede a AsyncTasks después de onPause?

protected void onPause() { 
      stopProgress(); 
      Log.i(TAG, "onPAUSE"); 
      try { 
      } finally { 
      // If we allocated a player, then cleanup after it 
      if (player != null) { 
       player.reset(); 
       player.release(); 
       player = null; 
       Log.d(TAG,"end of player cleanup"); 
          } 
      } 
      super.onPause(); 
     } 

Uso Escenario:

  1. Haga clic en el botón de reproducción en la actividad 1
  2. Pasar a la actividad 2 antes de jugador incluso cargas (información de onPause de registro es sin duda llama).
  3. Mientras está en la Actividad 2, el jugador de la Actividad 1 juega cuando termina de cargar.

Respuesta

3

Nada debería sucederle a AsyncTask. Continuará funcionando. Sin embargo, esta no es una excelente manera de ejecutar un reproductor multimedia en segundo plano (use un servicio para eso). Su código cancelará el reproductor multimedia, pero dependiendo de lo que tenga en su AsyncTask, aún puede estar activo. Puede asegurarse de que AsyncTask se elimine llamando al cancel (boolean mayInterruptIfRunning) en la tarea.

Si por cualquier razón el objeto MediaPlayer todavía se está ejecutando utilizando el código anterior, a continuación, llamar AsyncTask.cancel(true) y anular void onCancelled (Result result) y luego matar al MediaPlayer desde dentro de su hilo. Recuerde, onCancelled sólo se llama una vez que doInBackground devuelve (o se puede comprobar periódicamente isCancelled() para ver si algo ha llamado cancel() en su hilo. Si establece cancel(true) entonces yo creo que no molestará a la espera de doInBackground a fin, pero por supuesto que es no tan limpio.

1

No sé exactamente lo que está haciendo en usted AsyncTask, pero lo que sea que debe seguir funcionando incluso si se llama onPause(). Si se llama al onDestroy() y tiene material de referencia de AsyncTask en su actividad, sin embargo tendrá problemas porque AsycnTask esencialmente comenzará a lanzar excepciones de puntero nulo.

+0

En realidad, en la tarea, estoy configurando player = new MediaPlayer() .... duh :) – hunterp

+1

cuando se invoca onDestroy(), la tarea asincrónica debe cancelarse en ella. –

Cuestiones relacionadas