UI一般只能在主线程(UI线程),更新,如果要在子线程更新的话怎么办?
总结了一下大概有下面五种方式:
1.使用runOnUiThread()
示例代码:
new Thread() {
public void run() {
//这儿是耗时操作,完成之后更新UI;
runOnUiThread(new Runnable(){
@Override
public void run() {
//更新UI
button.setText("sssssss");
}
});
}
}.start();
new Thread() {
public void run() {
button.post(new Runnable(){
@Override
public void run() {
button.setText("sssssss");
}
});
}
}.start();
3. Broadcast
子线程中发送广播,主线程中接收广播并更新UI
4.AsyncTask
AsyncTask可方便地实现新开一个线程,并将结果返回给UI线程,而不需要开发者手动去新开一个线程,也无须开发者使用Handler,非常方便。
5.Handler + Message或者Handler + Thread + Message
其实最后两种(第四和第五)不算是在子线程中更新吧?