开始接触主线程和子线程之后觉得不应该在主线程中实现用户登录、语音识别还有合成这诸多工作,因为人们都说需要联网的工作最好另起新的线程。而且我调用语音包的程序跑起来也很复杂,所以本文就将介绍如何另起新线程运行语音识别。
关于前期准备工作参见前一篇博文
启动新的子线程主要要完成两个功能,一个是在子线程中定义如何运行自己的程序,第二个就是子线程完成了识别工作要及时通知主线程(又叫UI线程)以更新界面。
我的OutputActivity
public class OutputActivity extends Activity {
private static final int ASK_USER_INPUT = 1;
// Tip
private Toast mToast;
//语义理解结果显示
private EditText mResultText;
ClawnThread CoreThread = null;
// Handler object
private Handler MainHandler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case ASK_USER_INPUT:
mResultText.append(msg.obj.toString());
//showSpeechUnderstanderNoPop();
Log.e("haha","called");
break;
}
}
};
class ClawnThread extends Thread{
public void run(){
//Init the message looper queue
Looper.prepare();

本文介绍了如何在Android应用中避免在主线程执行耗时的语音识别任务,转而在子线程中进行。通过自定义ClawnThread类并重写run方法,以及使用Handler来在识别完成后更新主线程的UI。详细步骤包括子线程的Looper初始化、登录操作以及在语音识别回调中传递结果。
最低0.47元/天 解锁文章
1542

被折叠的 条评论
为什么被折叠?



