讯飞语音SpeechUtility.createUtility阻塞当前进程

 

今天在使用讯飞语音的SDK的时候,发现在平板上退出App重新打开App显示白屏,而在手机上面一切正常!经过层层调试,发现在Application中对SDK初始化的时候,主线程阻塞在了以下语句中:

SpeechUtility.createUtility(appContext, param.toString());

不应该呀,难道是*.so文件的原因?或者是SDK自带的bug???经验证,使用SDK DEMO是可以正常操作的,这就排除了SDK自带的bug,怀疑有可能是工程中的库跟demo中的库不完全一直所致,干脆就将demo中所有的库以及assert都拷贝到项目中,问题依旧!

于是怀疑退出程序的时候,SDK资源没有完全销毁掉,导致重新进入程序的时候出现问题,我在VoiceManager的destroy()函数中进行如下操作:

    @Override
    public void destroy() {
        stop();
        cancel();
        if (null != mTts) {
            mTts.stopSpeaking();
            // 退出时释放连接
            mTts.destroy();
            mTts = null;
        }
        if (null != mIat) {
            mIat.stopListening();
            mIat.destroy();
            mIat = null;
        }
        Logger.e(this,"Voice Manager destroy successfully.");
    }

应该是没问题的,但是为什么会没有完全销毁呢?注意到销毁的时候有Log信息打印,于是在手机上运行App,查看log,竟然发现退出程序的时候,没有上述log信息打印!!!检查程序,发现上述destroy方法是在MainActivity的onDestroy方法中调用的,也就是说,退出程序竟然没调用MainActivity的onDestroy()方法??具体原因参考我上一篇博客:https://mp.csdn.net/postedit/101800825

最后使用一下方式退出app,终于把问题解决了:

private void exitApp(){

    mVoiceManager.destroy();
    android.os.Process.killProcess(android.os.Process.myPid());

}

 

你可能感兴趣的:(讯飞语音SpeechUtility.createUtility阻塞当前进程)