问题是我在使用recorder的时候 程序没有响应,recorder.start() 的功能是 录音+ 画声纹。
原本当使用多线程的调用,用runnable,暂停按钮是没有反应的(延迟好几秒),不能及时结束线程。估计是在UI更新上的问题(可是不是已经用新线程了嘛?)
然后现在用的handler的switch 来写,也是延迟的问题
错误依然是 主线程要处理太多东西。
下面的代码,遇到的问题就是 当我点击完start之后,再点击stop按钮,是没有反应的。
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_play:
Message msg = Message.obtain();
msg.what = 1;
mhandler.sendMessage(msg);
break;
case R.id.btn_stop:
msg = Message.obtain();
msg.what = 0;
mhandler.sendMessage(msg);
break;
}
}
Handler mhandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
ss = path + "/" + ss + ".wav";
mRecorder.setOutputFile(ss);
mRecorder.prepare();
mRecorder.start();
break;
case 0:
mRecorder.stop();
mRecorder.release();
break;
}
}
};
}
你既然想在主线程之外执行
recorder.start()
,所以关键在于你代码中的mhandler是谁创建的? 如果是在UI线程中创建的,那么你通过mhandler.sendMessage
或者post(Runnable)
这些方式,相应的代码仍将在主线程中执行。