2013-03-04 84 views
0

我正在使用Handler和Runnable重複歌曲的一段,但它似乎耗盡了手機的電池,因爲它正在檢查每毫秒。這裏是我的代碼:有沒有什麼辦法可以提高使用Handler和Runnable的性能?

每當用戶啓動循環我做到以下幾點:

anotherHandler.post(mPlayLoopTask); 

anotherHandler在頂部」,宣佈了一個全局變量

  private Handler anotherHandler = new Handler(); 

這裏是我的Runnable:

private Runnable mPlayLoopTask = new Runnable() { 


     public void run() 
      { 

       if(mp != null) 
       { 
        if(isLoopOn && start_position != -1 && end_position != -1) 
        { 
         long currentPosition = mp.getCurrentPosition(); 




         if(currentPosition >=end_position) 
         { 
          mp.seekTo(start_position); 
         } 
        } 


        anotherHandler.post(this); 
       } 
      } 
     }; 

有沒有什麼辦法來提高性能?

回答

0

在您的代碼中,處理程序隊列中始終存在至少一個Runnable。這確實是一個問題,因爲線程將不斷執行待處理的消息,而不僅僅是一次幀。

的Android的AsyncTask有休眠/等待也許是你的情況更合適。

如果需要,您可以在這裏查看文檔和示例:https://developer.android.com/reference/android/os/AsyncTask.html

+0

但我需要檢查每毫秒如果當前位置已通過哪些用戶已採摘結束位置。這就是爲什麼隊列中總是有一個可運行的原因。我無法實現使用AsyncTask。 – user1777661 2013-03-05 03:20:52

+0

你確定你需要一毫秒的準確度。 如果每250毫秒檢查一次,用戶將聽不到差異。 – Hartok 2013-03-05 03:46:56

+0

Dooh ..沒想到那個。感謝您的輸入! – user1777661 2013-03-05 04:14:25

0

而且,我想嘗試的AudioTrack類,如果我是你。

setLoopPoints(int startInFrames, int endInFrames, int loopCount) 

設置循環點數和循環次數。

setPlaybackHeadPosition(int positionInFrames) 

設定播放頭位置。

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener) 

設置達到或每個週期性重放磁頭位置更新預先設置的標記,當AudioTrack通知監聽器。

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler) 

設置達到或每個週期性重放磁頭位置更新預先設置的標記,當AudioTrack通知監聽器。

+0

看起來這隻適用於PCM音頻。 – user1777661 2013-03-05 03:19:17

相關問題