android - 关于线程上的问题
高洛峰
高洛峰 2017-04-17 13:44:30
[Android讨论组]

问题是我在使用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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
黄舟

你既然想在主线程之外执行recorder.start(),所以关键在于你代码中的mhandler是谁创建的? 如果是在UI线程中创建的,那么你通过mhandler.sendMessage或者post(Runnable)这些方式,相应的代码仍将在主线程中执行。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号