刚拿到这个需求的时候,搜了一下相关文章,复习了一下播放器的调用。
方法网上很多,无非就是写一个服务,弄个接口给外部调用。
我忘记当时参照了的是哪篇文章,我找不到了,想感谢一些他给的思路。但是他的方法也是有问题的,在我不断找问题,想办法优化之后,现在我的播放器已经能正常满足需求了。
那篇文章的最大问题,是进度条更新机制,有个逻辑上的问题。
原因是发送Handler通知更新进度条时,进度条确实更新了,但是触发了进图条的 onProgressChanged()方法。
添加监听,重写这个方法是为了 拖动进度条,重新定位音乐用的。
所以播放起来很卡,一开始 我以为是Handler发送信息机制太消耗资源,我重新用了好几种方法实现,都还是很卡。
最后发现是有这么一个逻辑冲突。
解决办法:
只要把拖动进度条,重新定位音乐的逻辑触发,放在onStopTrackingTouch()即可
@Override public void onStopTrackingTouch(SeekBar seekBar) { //停止拖拽之后,才更新歌曲的进度位置。 isSeekBarClicked = false; mIservice.callSeekTo(seekBar.getProgress()); }