スレッド内に次のコードセクションがあります
if(isPlaying){
if(applyDsp){
// Convert short lin[] to double
Log.d("MYLOG", "applyDSP is True");
if(bufferFull){
// when the code reaches here x[39] always holds the latest sample
// (if lin.length == 1)
Log.d("MYLOG", "bufferFull is True");
for(i=0;i<(lin.length - 1);i++){
x[i] = x[i+1];
}
}
これは、スレッド内の無限ループ内にあります。スレッドの run() 関数は、この無限ループが終了するまで終了しません。したがって、上記のコード セクションは、他の条件が満たされるまで呼び出され続けます。applyDsp
とbufferFull
はboolean
変数です。それらは最初は false ですが、一度 true になると、run() 関数内の無限ループ内で false にリセットされません。bufferFull
true になると、無限ループが実行されるたびにメッセージとapplyDSP is True
がbufferFull is True
交互に表示されます。しかし、メッセージapplyDSP is True
が連続して複数回送信され、次に 2 つのメッセージが交互に送信され、次に継続的に送信され、さらに交互に送信され、というようapplyDSP is True
に繰り返されることがありました。私は彼のコードを何度も調べましたが、理由がわかりませんbufferFull
false にリセットされます。そのため、メッセージが適切な順序で表示されていない可能性があると推測しています。
Logcat はメッセージを表示する前に最初にバッファリングしますか、それとも Logcat で表示される順序はメッセージが作成された正確な順序ですか?
---編集---
@TCA による回答のコメントで説明されている方法を使用すると、logcat 出力の小さなセクションのみがファイルに書き込まれます。おそらく、コマンドが指定されたときに生成されます。Android SDKのlogcatパネルにストリーミングされるように、logcat出力をファイルにストリーミングしたい。