2013-11-23 33 views
0

我有幾個不同的Activity,每個Activity都有一個MediaPlayer和一個OnCompletionListener以在當前文件停止播放後啓動其他活動。還有就是建於OnCompletion監聽器的延遲,我通過與postDelayed處理程序實現,它看起來像這樣:中斷從OnCompletionListener中的處理程序中延遲的後期

public void onCompletion(MediaPlayer mp) { 

     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Intent stopplay; 
        stopplay = new Intent(actualActivity, Class 
          .forName(nextView)); 
        actualActivity.startActivity(stopplay); 
       } catch (ClassNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }, stopTime); 


} 

這樣做的問題是,當我把我的SettingsActivity,有時它只是切換到活動那會是下一個。所以我認爲它掛在postDelayd的等待...

我怎麼能解決這個問題?

我也爲此在這些活動的onStop,在onPause和的onDestroy:

if (mPlayer != null) { 
     mPlayer.stop(); 
     mPlayer.release(); 
     mPlayer = null; 
    } 

回答

2

你不得不取消您的處理程序的回調時,你不希望它被執行做。

在您的活動範圍內定義您的處理程序(因爲您必須達到它)。事情是這樣的:

public class MainActivity extends Activity { 

    Handler handler = new Handler(); 
    Runnable myRunnable; 
     ... 
} 

,並定義可運行的活動中(也許你內心onCreate法)

myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     try { 
      Intent stopplay; 
      stopplay = new Intent(actualActivity, Class 
        .forName(nextView)); 
      actualActivity.startActivity(stopplay); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
}; 

更改代碼:

handler.removeCallbacks(myRunnable); 
handler.postDelayed(myRunnable, stopTime); 

如果你想取消試試這個:

handler.removeCallbacks(myRunnable); 
+0

這個問題是,現在使用的處理程序是在擴展OnCompletionListener的類中。 它看起來像這樣: http://pastebin.com/fGJeSs0y – Kazoooka

+0

你必須有一個對該處理程序的引用。 – Devrim

+0

您是否看到我的問題在哪裏?我無法將該處理程序傳遞給OnCompletionListener ... – Kazoooka