質問には次のコードがあります。Androidスレッドはプロセスの途中でランダムに停止します
私が基本的にやりたいことは、配列のリストを持っていることです。「myArray」と言います。この配列には、格納されたミリ秒単位の時刻が格納されます。次に、これらの時点に基づいてメソッドを呼びたいと思います。したがって、音楽が再生されている間に0から時間カウンターを実行する必要があります。時間カウンターを配列のタイムポイントと順に(最初の配列インデックスから終了まで)比較してください。
最初のメソッド「timeCounter」は、音楽がMediaPlayerで再生されている間にタイムカウンターを開始する方法です。
public void timeCounter(){
Runnable myRunnable = new Runnable(){
@Override
public void run(){
while(musicPlaying){
startCounter(arrayPos);
}
}
};
Thread musicPlayer = new Thread(myRunnable);
musicPlayer.start();
}
ここで、アレイの時間カウンタと時間の比較が行われます。
public void startCounter(List<Long> array){
elapsedTime = System.currentTimeMillis() - timeStart;
if(elapsedTime == array.get(arrayPos)){
arrayPos += 1; //Continue comparing with the next number in the array
Log.v("DEBUG", "TIME MATCHES!");
if(arrayPos>= array.size()){
arrayPos= 0; //Prevent out of array index
}
}
}
私はコードが正しく動作しており、LogCatの結果は正しいです。
これで、スレッドが音楽の再生が完了するまで(私はonCompletionListenerを設定し、音楽が終了すると "musicPlaying"をfalseに設定する)、スレッドが実行されないことがあります。停止点はまったくランダムであり、開始されたばかりのとき、つまり約50%、または完了するまでになっているときもあります。時にはそれは始まらない! 私は理由を理解しようとしていましたが、途中で停止しているスレッドに関する情報をどこからでも見つけることができませんでした。前もって感謝します! =)
スレッドが 'musicPlaying'変数のステータスで終了したときにメッセージを記録すると便利です。私は@Tudorにスポットがあり、 'musicPlaying'がスレッド間でランダムに更新されていると確信しています。 – Gray
私がスレッド内に入れたログメッセージがアプリケーションを終了してもメッセージを表示していれば、それは 'musicPlaying'がプロセス全体を通して真実であることを意味します。 –
@Grayメッセージはどこに記録すればよいですか?ルーパーにログを書き込むと、私のlogcatが氾濫し、スレッドは実行し続けて、アプリケーションを終了しても、musicPlayingの "true"を表示します。 –