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