处理程序落后于App

时间:2015-09-01 18:27:57

标签: java android handler runnable

我正在使用Seekbar对音乐播放器进行编程。使用带有Runnable的Handler对其进行管理。不知何故,它落后于我的UI。我怎样才能阻止这种滞后?

OnCreate:

mHandler  = new Handler();

当我在播放一首歌时:

 public static void updateProgressBar() {
        mHandler.postDelayed(mUpdateTimeTask, 100);
    }   

My Runnable:

private static Runnable mUpdateTimeTask = new Runnable() {
         public void run() {

             try {
             long totalDuration = songService.getTotalDuration();
             int currentDuration = songService.getCurrentDuration();

             // Displaying Total Duration time
             player_time_length.setText(""+utils.milliSecondsToTimer(totalDuration));

             // Displaying time completed playing
             player_time_current.setText(""+utils.milliSecondsToTimer(currentDuration));

             // Updating progress bar
             int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration));

             SB_song.setProgress(currentDuration);

             // Running this thread after 100 milliseconds
             mHandler.postDelayed(this, 100);
             }catch(Exception e){}
         }
      };

如何在我的应用程序中阻止此问题?

3 个答案:

答案 0 :(得分:2)

滞后是因为Runnable正在执行UI Thread。要减少或消除延迟,您必须减少Runnable内的工作量。

您可以做的一件事就是从long totalDuration = songService.getTotalDuration();删除Runnable,而不是像我在音乐播放器中那样把它放在外面。

如果您包含用于将毫秒转换为人类可读时间的“utils”方法,我可以为此答案添加更多内容。

答案 1 :(得分:0)

我会说它因为它在UI线程上运行而滞后。但你必须使用UI元素,因此不可能使用另一个Thread ..我是对的吗?

答案 2 :(得分:0)

确保文本视图未设置为wrap_content。每次调用setText时都会触发布局传递。