采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,这边handler用的方式有问题吧?播放停止或者暂停了,handler还是在不停的处理onProgress , 播放完成了日志还在不停的输出 。 我觉得应该将 mHandler.removeMessages(H_PROGRESS); 改为 mHandler.removeCallbacksAndMessages(null);
mHandler.removeMessages(H_PROGRESS);
mHandler.removeCallbacksAndMessages(null);
播放器的逻辑是处于play的时候则启动Handler进行进度的读取,当处于pause或者stop的时候则将handler的message给remove掉,如下代码:
/** * 暂停播放 */ public void pausePlay() { if (isPlaying()) { mMediaPlayer.pause(); MEDIA_STATUS = MEDIA_STATUS_PAUSE; mHandler.removeMessages(H_PROGRESS); //这行 } } /** * 停止播放 */ public void stopPlay() { mMediaPlayer.stop(); MEDIA_STATUS = MEDIA_STATUS_STOP; mHandler.removeMessages(H_PROGRESS); //这行 }
handler已经被remove掉,onProgress则不会走,这是正常的逻辑。
但是有一种情况,也就是你所说的情况,我看了下代码,确实是我疏忽了的逻辑
播放完成之后,走的是OnComplteionListener这个监听,实际上并没有调用stop方法,所以onProgress才会一直走,你可以在播放结束并且没有后续的歌曲播放的时候进行手动的关闭,如:
/** * 无歌曲不需要监听进度 */ public void removeHandler() { if (mHandler != null) { mHandler.removeMessages(H_PROGRESS); } }
不过一般的播放器会有循环播放的逻辑,不会让用户处于无歌曲的状态的,除非用户手动暂停或者关闭。
两个都是可以的,前者是清除进度的Message 后者 是 清除这个Handler的所有消息和Callback。
老师,这两个有什么区别吗? mHandler.removeMessages(H_PROGRESS);和mHandler.removeCallbacksAndMessages(null);
//清除指定的消息 mHandler.removeMessages(H_PROGRESS); //清除这个Handler所有的消息和回调 mHandler.removeCallbacksAndMessages(null);
好的,谢谢啊
登录后可查看更多问答,登录/注册
从零打造一款跟随灵魂的高性能社交App
1.3k 10
1.2k 7
1.3k 7
1.1k 7
963 6
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号