android - 关于线程上的问题
高洛峰
高洛峰 2017-04-17 13:44:30
0
1
233

问题是我在使用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;
                }
            }
        };
}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(1)
黄舟

Since you want to execute recorder.start() outside the main thread, the key is who created the mhandler in your code? If it is created in the UI thread, then if you pass mhandler.sendMessage or post(Runnable) these methods, the corresponding code will still be executed in the main thread.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!