今天Monkey跑出来的一个Bug:
E/AndroidRuntime( 3359): FATAL EXCEPTION: Timer-0
E/AndroidRuntime( 3359): Process: com.android.soundrecorder, PID: 3359E/AndroidRuntime( 3359): java.lang.IllegalStateException
E/AndroidRuntime( 3359): at android.media.MediaPlayer.isPlaying(Native Method)
E/AndroidRuntime( 3359): at com.android.soundrecorder.SoundRecorder$MyTimerTask.run(SoundRecorder.java:1700)
调用stopPlay()函数时出错了,原因是10毫秒刷新太快了,即便stopPlay()中作了mTimerTask.cancel();mTimerTask = null;操作,还是走到了代码第9行。
解决办法:刷新时间调大点(300ms,500ms)或者加锁吧。
代码片段:
Timer timer = new Timer();
if (null != mTimerTask) {
mTimerTask.cancel();
mTimerTask = null;
}
mTimerTask = new MyTimerTask();
timer.schedule(mTimerTask, 0, 10);class MyTimerTask extends TimerTask {
@Override
public void run() {
if (isChanging == true) {
return;
}
if (null != mTimerTask) {
if (null != mPlayer) {
if (mPlayer.isPlaying()) {
mSeekBarLeftTime = mPlayer.getCurrentPosition() / 1000;
mHandler.sendEmptyMessage(LEFT_TIME);
}
}
}
}
}
public void stopPlay() {
LogUtil.v(TAG, "stopplay()");
if (null != mTimerTask) {
mTimerTask.cancel();
mTimerTask = null;
}
if (mPlayer == null)
return;
mPlayer.stop();
mPlayer.release();
mPlayer = null;
}
本文探讨了Android录音应用中遇到的一个Bug,即在调用stopPlay()函数时,Timer任务异常终止的问题。通过分析代码,发现刷新频率设置过低导致的异常。提出了解决方案,包括增加刷新时间间隔或使用锁机制来避免此类问题。
4779

被折叠的 条评论
为什么被折叠?



