当前位置: 代码迷 >> Android >> progressBar 子线程更新UI,该怎么解决
  详细解决方案

progressBar 子线程更新UI,该怎么解决

热度:508   发布时间:2016-05-01 12:42:03.0
progressBar 子线程更新UI
android中更新UI只能用UI线程,要在子线程中数据发生改变来更新主线程的ui,一般是通过消息机制,message和handler结合的方式,但是经过测试,发现ProgressBar更新进度条时,确实可以在子线程刷新,请了解内情者告知,感谢!
代码如下:

new Thread() {
@Override
public void run() {
try {

while (count <= 100) {
pg.setProgress(count++);
Thread.sleep(100);
} }catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();

------最佳解决方案--------------------
因为progressBar是线程安全的,他是例外的。
http://bbs.csdn.net/topics/360244795
------其他解决方案--------------------
该回复于2012-12-10 08:37:43被管理员删除
------其他解决方案--------------------
自己找到答案了。

在 setProgress 的源码中,首先会判断当前线程是否为主UI线程,若是主UI线程则直接调用 doRefreshProgress 方法更新进度;若不是主UI线程则会先创建一个RefreshProgressRunnable 对象,然后调用 view 的 post(Runnable action) 方法,将 RefreshProgressRunnable 放到主UI线程的消息队列等待处理。所以更新进度的时候,在不在主线程调用setProgress 方法是没有影响的。同理,SeekBar、ProgressDialog 也是可以在子线程直接更新进度的。
  相关解决方案