处理程序滞后于应用程序

Handler laggs the App

我正在使用 Seekbar.To 对音乐播放器进行编程管理,我正在使用带有 Runnable 的处理程序来更新它。不知何故,它落后于我的 UI 。我怎样才能停止这种滞后?

创建时:

mHandler  = new Handler();

当我播放歌曲时:

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

我的可运行:

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){}
         }
      };

如何防止我的应用出现这种延迟?

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

延迟是因为 RunnableUI Thread 中执行。要减少或消除延迟,您必须减少在 Runnable.

中所做的工作量

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

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

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