0

私の Android アプリケーションでは、TTS と音声認識を使用しています。使用可能なすべてのコールバックを使用して状況を把握しているにもかかわらず、対処できない状況が発生します。例:

1) TTS は初期化の成功を報告しますが、発言に失敗します (一部のカスタム TTS エンジンの既知の問題 (名前が言及されていない))。

2) 最初の接続が成功した後、ネットワーク アクセスが失われるため、ネットワーク エラーが返されるまでに膨大な遅延が発生する可能性があります。

私があなたを退屈させない他の状況があります。

thisthisなどの時間監視スレッドを読んで消化したので、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
    }

混乱の中で、私が達成しようとしていることをなんとか表現できたことを願っています。

よろしくお願いします。

4

1 に答える 1

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();
于 2012-07-17T14:36:38.710 に答える