音频seekBar线程问题?

时间:2011-07-24 07:13:18

标签: android multithreading media-player seekbar

最初,我有一个MediaPlayer mPlayers来播放/暂停/停止我的音频文件。现在,我正在尝试为我的媒体添加搜索栏。我尝试使用Threads,这就是我提出的:

在onCreate()中:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            mPlayer.seekTo(progress);
        }

////........Omitted Code..........\\\\

//At the very end of the method:
seekThread  = new Thread(this); //My Activity implements:Runnable
seekThread.start();

然后,我实施了一个方法run()来每1秒更新一次搜索栏:

public void run() {
    try {
        while(mPlayer != null){
            int currentPosition = mPlayer.getCurrentPosition();
            Message msg = new Message();
            msg.what = currentPosition;
            threadHandler.sendMessage(msg);
            Thread.sleep(1000);
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
private Handler threadHandler = new Handler(){
    public void handleMessage(Message msg){
        seekBar.setProgress(msg.what);
    }
};

然而,在我的 HTC Magic 中,音频运行效率低下。有些话是重复的。似乎搜索栏每隔一段时间就会回归一次。

为了让你理解这个问题,让我们这样说:如果音频说:abcdefghijklmn,那么它将是这样的:abccdeffghijjklmnn。

您建议我的帖子有什么改进吗?我做得对吗?

1 个答案:

答案 0 :(得分:3)

不确定这会有所帮助,但请尝试:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        if (fromUser) {
            mPlayer.seekTo(progress);
        }
    }

没有这个条件,mPlayer.seekTo(进度);每次调用seekBar.setProgress(msg.what);

时都会调用