一部の (すべてではない) 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'
}
}