今天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;
}