首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2012-12-15 
progressBar 子线程更新UIandroid中更新UI只能用UI线程,要在子线程中数据发生改变来更新主线程的ui,一般是

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 也是可以在子线程直接更新进度的。

热点排行