Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序中的进度条闪烁_Android_Multithreading_Progress Bar_Progress_Seekbar - Fatal编程技术网

Android应用程序中的进度条闪烁

Android应用程序中的进度条闪烁,android,multithreading,progress-bar,progress,seekbar,Android,Multithreading,Progress Bar,Progress,Seekbar,我正在尝试制作一个流媒体音乐播放器,但是我正在尝试实现的SeekBar有点问题。目前,它在播放第一首歌曲时动作正确。我可以正确地搜索,它会在另一个线程中自我更新。我遇到的问题是,当一首新歌开始时,SeekBar会从最后一首歌的持续时间闪烁到当前歌曲的当前进度。任何帮助都将不胜感激 希克巴宣言 progress = (SeekBar) findViewById(R.id.seekBar1); progress.setOnSeekBarChangeListener(new OnSee

我正在尝试制作一个流媒体音乐播放器,但是我正在尝试实现的SeekBar有点问题。目前,它在播放第一首歌曲时动作正确。我可以正确地搜索,它会在另一个线程中自我更新。我遇到的问题是,当一首新歌开始时,SeekBar会从最后一首歌的持续时间闪烁到当前歌曲的当前进度。任何帮助都将不胜感激

希克巴宣言

    progress = (SeekBar) findViewById(R.id.seekBar1);
    progress.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            if(fromUser) {
                media.seekTo(progress);
            }
            else {                  
            }               
        }

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

        }

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

        }

    });
SeekBar在单独线程中更新

int current = 0;
    int total = media.getDuration();
    progress.setMax(total);
    progress.setIndeterminate(false);

    while(media!=null && current < total){
        try {
            Thread.sleep(1000); 
            current = media.getCurrentPosition();
            progress.setProgress(current);
        } catch (Exception e) {
            e.printStackTrace();
        }
    };
int电流=0;
int total=media.getDuration();
进度。setMax(总计);
进度。设置不确定(false);
while(媒体!=null&¤t
您开始执行进度更新的线程似乎从未终止,这意味着即使在歌曲结束后,它仍将每秒更新一次进度


current
很可能是罪魁祸首。根据我的记忆,当前位置将不会(或至少不保证)一直计算到总长度,因此循环永远不会终止,您应该在
MediaPlayer中添加一个
,以便在歌曲结束时得到可靠的通知。

您不应该直接从单独的
线程操作
视图。使用
View.post
runOnUiThread
来更新
视图

能否提供线程类的完整声明及其交互方式?媒体是否未设置为空?您是否验证过电流是否达到总电流值?