在我的Android应用程序中,我使用TTS和语音识别。尽管使用所有可用的回调来了解它们所处的状态,但我仍然遇到无法处理的情况。例子:
1)TTS报告成功初始化,但未能发言(某些自定义TTS引擎的已知问题(未提及名称))。
2)初始成功连接后网络访问会丢失,这可能会在返回网络错误之前导致大量延迟。
还有其他情况我不会厌烦你。
我已经阅读并消化了时间监控线程,例如this和this,所以我理解如何准确地确定X& Y之间的时间,但这是我追求的监控方法,当达到设定限制时我可以做出反应。
请原谅我的伪代码,但我举起手来,我不知道从哪里开始......
public boolean methodSuccess = false;
public void troublesomeMethod() {
if(// everything completed and I got a usual result) {
methodSuccess = true;
}
public boolean timeMonitor(int maxDuration) {
// use System.currentTimeMillis() here as start value
// monitor time elapsed here in loop
// monitor methodSuccess in loop
// return false if methodSuccess is set to true whilst in loop
// break if maxDuration reached and return true
}
再次,原谅上面的代码,我根本无法想到如何实现这个......
另外,如果我用以下内容开始上述:
boolean monitorThis = timeMonitor(5000); // let me know when 5 seconds have passed
startTroublesomeMethod(); // the one I want to monitor
如果我必须在startTroublesomeMethod()实际开始之前'等待'返回的布尔响应,那将毫无意义!或者麻烦的方法在我开始监控之前就开始了......
if(monitorThis) {
// react to lagging method by destroying TTS or Listener Object
} else {
// the troublesomeMethod behaved normally - do nothing
}
我希望在我的困惑中我能够表达我想要实现的目标。
我事先感谢你的帮助。
答案 0 :(得分:1)
您可以使用Handler
发布延迟支票。例如:
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override public void run() {
// You can set a flag or if you run your method
// on another thread, you can interrupt that thread.
}
}, 5000);
请记住,Handler设置为创建它的同一个线程。如果您尝试监视的方法在同一个线程中运行,则可能会出现问题。在另一个线程中调用您的方法并保留对该线程的引用以在必要时中断它。
Thread mThread = new Thread(new Runnable() {
@Override public void run() {
// Call your method here and keep a reference to this thread.
}
});
mThread.run();