Android handler.postDelayed正在阻止我的媒体播放器运行一首歌吗?

时间:2015-12-27 15:50:19

标签: android

嗨,我是Android编程新手,我在构建媒体播放器应用程序方面几乎没有帮助,我在其中使用搜索栏来更新进度,如下所示:

 Handler handler = new Handler();
    paly.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    s_player.start();
                    p_bar.run();
                }
            });

Runnable p_bar = new Runnable() {
        @Override
        public void run() {
            start_time = s_player.getCurrentPosition();
            s_bar.setProgress((int) start_time);
            handler.postDelayed(p_bar, 100);

        }
    };

所以此代码在100ms后更新sekkbar,但歌曲播放不顺畅???

3 个答案:

答案 0 :(得分:1)

我在这里发现了一个错误,可能与问题有关,可能没有。

  Runnable p_bar = new Runnable() {
    @Override
    public void run() {
        start_time = s_player.getCurrentPosition();
        s_bar.setProgress((int) start_time);
        handler.postDelayed(p_bar, 100);

    }
};

在p_bar中,您在run()方法中调用postDelayed,而postDelay()将runnable对象添加到MessageQueue,Runnable的run()方法将被调用在队列中到达此Runnable对象时的系统。

所以它就像一个循环,你可以运行,postDelay会调用run(),而run()会调用postDelay()....

所以请不要在run方法中调用postDelay()。

答案 1 :(得分:1)

这是我的表现;

paly.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    s_player.start();
                    handler.postDelayed(p_bar,100);

                }
            });

 Runnable p_bar = new Runnable() {
        @Override
        public void run() {
            s_bar.setProgress((int) s_player.getCurrentPosition());
        }
    };

现在的问题是它的播放速度很快但没有更新进度条

答案 2 :(得分:0)

你必须实现搜索栏监听器....这对我有用

    SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() {

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        // TODO Auto-generated method stub

        if (fromUser) {
            mediaPlayer.seekTo(progress);
            seekBar.setProgress(progress);
        }

    }
};