手机锁定时,AudioRecord.stop()挂起(仅限Galaxy S3)

时间:2013-05-31 17:24:18

标签: android cmusphinx

嗯......这是背景:

我正在使用pocketsphinx的实验性应用程序。基本上,我正在运行一个运行线程的服务。该线程管理RecognizerTask对象。它向RecognizerTask对象发出信号以开始记录和识别语音,15秒后,它向IgnizerTask对象发出关闭信号。之后,它再次发出信号并重复该过程。

遵循管理RecognizerTask对象的线程的代码:

public void run() {
        while(!this.interrupted){
            try{
                Thread.sleep(15000);
            }
            catch (InterruptedException e){
                e.printStackTrace();
                return;
            }
            rec.shutdown();
            try {
                rec_thread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            if(Thread.interrupted())
                return;

            rec = new RecognizerTask();
            rec_thread = new Thread(rec);

            System.gc();

            rec.setRecognitionListener(MyService.this);

            rec_thread.start();
            rec.start();
        }
}

这里的问题如下:如果设备处于唤醒状态并且屏幕已打开,则一切正常。但是如果屏幕被锁定,则线程会在.join()调用时冻结。进一步检查,我意识到.join()冻结了,因为对ReconizerTask对象中存在的AudioRecord实例的一次调用就不会返回!一旦我解锁手机,一切都运行良好!此外,我的服务在运行时获得了部分唤醒锁。

更糟糕的是:据我所知,这只发生在Galaxy S3设备上(虚拟设备和Galaxy Nexus没有显示此行为)。

所以,问题是:可能导致这个问题的原因是什么?

0 个答案:

没有答案