问题场景如下:我在播放一段MP3的时候,现需要在播放30秒后自动停止,于是乎我开启了一个延迟任务线程(没代码说个毛线),代码如下:

没毛病,30秒后MP3停止播放。有这么样一个情况:我在10秒的时候又开启了一个上面一模一样的线程去播放另一个MP3(mPlayer是单例的!mPlayer是单例的!mPlayer是单例的!),代码如下:

那么问题来了,当播放到20秒左右的时候就停止播放了。坑爹啊,明明设置的是30秒啊!现在看问题很简单了,就是因为播放第一条MP3的时候开启的线程还在运行,mPlayer又是单例设计的,所以当你10秒后播放第二条MP3时 ,第一个延迟线程生效了!
既然知道原因了,解决问题就很简单了,当播放第二个MP3的时候直接取消延迟线程,废话少说直接上代码:

附加代码:


总结:取消线程任务延迟,就一行代码: mainHandler.removeCallbacks(mRunnable)
肯定还有其它的方法,欢迎讨论交流!
网友评论