TextToSpeech.OnInitListener.onInit(int) が継続的に呼び出される 質問する

TextToSpeech.OnInitListener.onInit(int) が継続的に呼び出される 質問する

一部の (すべてではない) HTC Desire HD (FRF91、2.2) および HTC EVO 4G ( PC36100|3.29.651.5、2.2) で、TextToSpeech.OnInitListener.onInit(int)同じオブジェクトに対して が繰り返し (数秒間に 1500 回以上) 呼び出されているという報告を受けています。私の知る限り、この動作は他のユーザー (または他の Desire HD ユーザー) には発生していません。

コードは次のとおりです:

TextToSpeech tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
    private int mCallCount = 0; // trying to investigate potential infinite loops

    @Override
    public void onInit(int status) {
        if ((mCallCount % 100) == 1) {
            // report this
        }
        mCallCount++;
    }
});

誰か何かアイデアはありますか?

編集: メソッドの呼び出しも試みましたがshutdown()(複数のリスナー呼び出しが初めて検出されたとき)、これは役に立たないようです。

ベストアンサー1

おそらく、次のような独自の中間方法でこれを回避する必要があります。

private long lastCall = 0;
private long deepBreath = 5*1000; //5 seconds
private boolean hasRested;

TextToSpeech tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() { 
    @Override 
    public void onInit(int status) { 
        long thisCall = Calendar.getInstance().getTimeInMillis();
        intermediaryMethod(status, thisCall);
    } 
}); 

//new method
public void intermediaryMethod(int status, long thisCall) {
    hasRested = (thisCall-lastCall)>=deepBreath;
    if (hasRested) {
        lastCall = thisCall;
        //do something about 'status'
    }
}

おすすめ記事