2015-04-12 65 views
1

我正在嘗試構建一個應用程序,在每次調用onCreate()時播放一段音樂,並且我希望在整個應用程序(即跨活動)中播放此音樂。到目前爲止,我所做的是在OnCreate()內創建一個Thread,並將其稱爲backgroundMusic,在其中創建了一個來自我的Raw文件夾中音樂片段的MediaPlayer對象。考慮到音樂本身只運行一分鐘左右,平均花在應用程序上的時間更多,我做了一段時間循環,只要應用程序運行檢查音樂是否正在播放,如果不是,則調用start() ;應用程序的背景音樂應該擁有自己的主題嗎?

backgroundMusic = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     while (appIsRunning){ 

      if(! music.isPlaying()){ 
       music.start(); 
      } 
     } 
    } 
});backgroundMusic.start(); 

代碼運行得很好,但是我也特別注意到有些滯後後,當一些其他線程和圖像獲取loaded.what我想問一下,這是一個合適的方式來播放背景音樂?有沒有更好的方法來做到這一點? 另外,如何在應用程序關閉時讓音樂停止?

回答

1

這是播放背景音樂的適當方式嗎?

不,您需要在服務上聲明音樂。服務:

  • 將獨立活動的生命週期,因此需要像來電時音樂將繼續播放時,活動被關閉

  • 可以暫停

Here是有所收穫你開始了。快樂的編碼!

+0

感謝凱,這就是我一直在尋找的。我想問你,如果服務在UI線程中運行,如果是的話,我會需要一個線程內的? – RaedTabani

+0

很高興它幫助! UI線程上的音樂很好,因爲新的服務也會在UI線程中產生。但是,您也可以在服務中啓動線程,但音樂播放器不需要線程。隨時接受答案:) – Kay

+0

絕對:)但是,我可以得到您對ToasteR的答案的反饋?他建議使用Asynctask – RaedTabani