2011-11-10 5 views
5

私は、次のアクティビティに移動する前に実行されるAsyncTaskを持っています。このAsyncTaskの中には、MediaPlayerがあります。onPause後にAsyncTasksはどうなりますか?

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(); 
     } 

利用シナリオ:プレイヤーにもロードされる前に1

  • 移動活動2への活動で

    1. クリックして再生ボタンを(onPauseからログ情報を確実に呼ばれています)。
    2. アクティビティ2では、読み込みが完了すると、アクティビティ1のプレイヤーが再生されます。
  • 答えて

    3

    AsyncTaskに何も起こりません。それは引き続き実行されます。しかし、これは、バックグラウンドでメディアプレーヤーを実行するための素晴らしい方法ではありません(そのためのサービスを使用する)。あなたのコードはメディアプレーヤーをキャンセルしますが、あなたのAsyncTaskの内容によってはまだアクティブになっている可能性があります。タスク上でcancel (boolean mayInterruptIfRunning)を呼び出して、AsyncTaskが強制終了されることを確認できます。あなたのMediaPlayerオブジェクトがまだ上記のコードを使用して実行されている何らかの理由場合

    、その後、AsyncTask.cancel(true)を呼び出し、void onCancelled (Result result)を上書きして、あなたのスレッドの中からMediaPlayerを殺します。だことを覚えておいてください、onCancelledだけdoInBackground復帰した後に呼び出されます(または、あなたが定期的に何かがあなたのスレッドでcancel()を求めているかどうかを確認するためにisCancelled()を確認することができます。あなたはcancel(true)を設定した場合、私はそれがフィニッシュにdoInBackgroundを待っている気にしないだろうと考えているが、もちろんの

    1

    私はAsyncTaskで何をしているのか正確にはわかりませんが、これまでどおりに続けるべきですonPause()が呼び出されます。 onDestroy()が呼び出され、アクティビティでAsyncTaskを参照している場合は、AsycnTaskが基本的にnullポインタ例外をスローするため、問題が発生します。

    +0

    実際には、私はplayer = new MediaPlayer().... duh :) – hunterp

    +1

    を設定しています。onDestroy()が呼び出されると、非同期タスクはその中でキャンセルされます。 –

    関連する問題