AudioRecordコンストラクターを呼び出すコードを使用しています。
AudioRecord listener = new AudioRecord(list of parameters);
do {} while (listener.getState() != AudioRecord.STATE_INITIALIZED);
このコードは、AudioRecordが別のスレッドでオフになり、初期化に時間がかかる場合に意味があるように思われます。ただし、これが当てはまるかどうかはわかりません。そうでない場合は、初期化が実際に失敗したときに無限ループが開始されないように、コードをチェックして例外を返す方がはるかに良いように思われます(チェックの数を有限のものに制限することもできますが)。
コードをそのままにするか、2行目を次のようなものに置き換える必要がありますか?
if(listener.getState() != AudioRecord.STATE_INITIALIZED) {
throw new Exception("AudioRecord failed to initialize");
}