处理程序滞后于应用程序
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 元素,所以另一个线程是不可能的..我是对的?
延迟是因为 Runnable
在 UI Thread
中执行。要减少或消除延迟,您必须减少在 Runnable
.
中所做的工作量
您可以做的一件事是从 Runnable
中删除 long totalDuration = songService.getTotalDuration();
,然后将其放在外面,就像我在音乐播放器中所做的那样。
如果您包含用于将毫秒转换为人类可读时间的 "utils" 方法,我可以在此答案中添加更多内容。
确保文本视图未设置为 wrap_content。这将在您每次调用 setText 时触发布局传递。
我正在使用 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 元素,所以另一个线程是不可能的..我是对的?
延迟是因为 Runnable
在 UI Thread
中执行。要减少或消除延迟,您必须减少在 Runnable
.
您可以做的一件事是从 Runnable
中删除 long totalDuration = songService.getTotalDuration();
,然后将其放在外面,就像我在音乐播放器中所做的那样。
如果您包含用于将毫秒转换为人类可读时间的 "utils" 方法,我可以在此答案中添加更多内容。
确保文本视图未设置为 wrap_content。这将在您每次调用 setText 时触发布局传递。