音楽の進行状況を示すシークバーを作成しようとしています。シークバーから親指のアイテムをドラッグすると、音楽の進行状況が実際の値を変更します。すべてのロジックは asynctask に実装されています。問題は、UIthread から asynctask をキャンセルして再度実行すると、メソッドpublishProgress() がまったく実行されないことです。残りのメソッド (doinbackground、onpreexecute ..) は常に正常に動作します。なぜこれが起こっているのか知っている人はいますか?私が行方不明のスレッドについての何か。どうも!
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaplayer.seekTo(actual);
update = new updateUI();
update.execute();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
update.cancel(true);
}
@Override
public void onProgressChanged(SeekBar seekBar,
int progress, boolean fromUser) {
}
});
非同期タスク:
private class updateUI extends AsyncTask<Void, Integer, Void> {
@Override
protected Void doInBackground(Void... params) {
while (mediaplayer.isPlaying() || isCancelled()) {
//code
publishProgress(actual);
}
return null;
}
@Override
protected void onPreExecute() {
//code
}
protected void onProgressUpdate(Integer... progress) {
//code
}
}