首先要知道 进度条和Toast是可以在子线程跟新和显示的,因为他们做了内部处理(用handle把信息传递到主线程,在主线程更新,感兴趣的去搜一下)。
具体思路是:
首先,定义一个接口(不要定义内部接口)用来更新seekbar,代码如下
public interfaceInitplayingPop {
voidinitPlayingPop(intprogress);
}
然后,在服务定义一个不断执行的子线程去得到当前音乐的播放时间,并且执行这个接口(在接口不为null的情况下),代码如下
classSeekBarThreadimplementsRunnable {@Overridepublic voidrun() {inti = 5;while(i > 0) {try{intcurrentMent = (int)getCurrentTime();if(initplayingPop!=null) {initplayingPop.initPlayingPop(currentMent);}Thread.sleep(500);
}}catch(InterruptedException e) {e.printStackTrace();}}Log.w(TAG,"run:子线程开始");}}
然后在主界面实现该接口,并把该接口给服务,完成接口回调,代码如下
musicService.setInitplayingPop(newInitplayingPop() {@Overridepublic voidinitPlayingPop(intprogress) {popWinPlaying.setProgressToSeekBar(progress);}});