Android Monkey跑出来的一个Bug:IllegalStateException

本文探讨了Android录音应用中遇到的一个Bug,即在调用stopPlay()函数时,Timer任务异常终止的问题。通过分析代码,发现刷新频率设置过低导致的异常。提出了解决方案,包括增加刷新时间间隔或使用锁机制来避免此类问题。

今天Monkey跑出来的一个Bug:

E/AndroidRuntime( 3359): FATAL EXCEPTION: Timer-0

E/AndroidRuntime( 3359): Process: com.android.soundrecorder, PID: 3359
E/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;
    }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值