首先要知道 進度條和Toast是可以在子線程跟新和顯示的,因爲他們做了內部處理(用handle把信息傳遞到主線程,在主線程更新,感興趣的去搜一下)。
具體思路是:
首先,定義一個接口(不要定義內部接口)用來更新seekbar,代碼如下
public interface InitplayingPop {
void initPlayingPop(int progress);
}
然後,在服務定義一個不斷執行的子線程去得到當前音樂的播放時間,並且執行這個接口(在接口不爲null的情況下),代碼如下
class SeekBarThread implements Runnable { @Override public void run() { int i = 5; while (i > 0) { try { int currentMent = (int) getCurrentTime(); if (initplayingPop != null) { initplayingPop.initPlayingPop(currentMent); } Thread.sleep(500);
} } catch (InterruptedException e) { e.printStackTrace(); } } Log.w(TAG, "run: 子線程開始"); } }
然後在主界面實現該接口,並把該接口給服務,完成接口回調,代碼如下
musicService.setInitplayingPop(new InitplayingPop() { @Override public void initPlayingPop(int progress) { popWinPlaying.setProgressToSeekBar(progress); } });