首先要知道 进度条和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); } });