【发布时间】:2014-08-14 22:31:21
【问题描述】:
我是 Android 编程新手,所以我可能犯了一个简单的错误。我已经实现了一个带有相应 SeekBar 和 TextView(倒计时)的 MediaPlayer。大约一半时间,SeekBar 和 TextView 在播放期间停止更新。我正在播放的音频文件很短,最长为 60 秒....在这种特殊情况下,我的文件长度为 10-15 秒。
对应的更新函数如下:
private static MediaPlayer mMediaPlayer;
private static SeekBar mSeekBar;
private static TextView mClock;
private static Handler mHandler = new Handler();
.
.
.
private void startPlayProgressUpdater() {
if(mMediaPlayer != null && mMediaPlayer.isPlaying()) {
final String s = OyoUtils.constructMinSec(mMediaPlayer.getDuration() - mMediaPlayer.getCurrentPosition());
Log.e("",s + " " + mMediaPlayer.getCurrentPosition());
mSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
mClock.setText(s);
Runnable update = new Runnable() {
public void run() {
startPlayProgressUpdater();
}
};
mHandler.postDelayed(update, 200);
} else {
Log.e("","Not playing");
}
}
日志确实确认s 和mMediaPlayer.getCurrentPosition() 的值是它们应有的值,并且即使在SeekBar 和TextView 停止更新后也继续使用新的和正确的值进行更新。日志示例如下所示:0:11 4650
SeekBar 和 TextView 总是一起停止更新,从来没有出现过一个继续更新另一个不更新的情况。
如果我在 SeekBar 和 TextView 停止更新后暂停播放,然后开始播放,SeekBar 和 TextView 会跳转到正确的位置/值。
当这些值停止更新时,LogCat 中没有错误。我的代码中没有其他地方可以打开新线程、重新启动 mHandler 或使用任何 Runnables。
有什么想法吗?
【问题讨论】:
标签: java android handler android-mediaplayer runnable