我们将工作线程转换为UI线程,主要是进行UI的更新操作;
在工作线程中使用三种方法:
- Activity的runOnUiThread(Runnable);
- View 的post(Runnable);
- View 的postDelayed(Runnable);
三个方法传的是Runnable接口对象
new Runnable() {
@Override
public void run() {
} }
案例:不断设置TextView的值
以下为三种方式的部分代码,省略布局xml,以及控件的绑定等操作
runOnUiThread(Runnable)
//Button的点击事件
public void onClick(View view){
//开启一个工作线程,进行值的改变
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
//每隔0.08秒更新设置一次值
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
//Activity的方法
runOnUiThread(new Runnable() {//加入UI线程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
});
}
}
}).start();
}
post(Runnable)
//Button的点击事件
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
//View的方法
textView.post(new Runnable() {//加入UI线程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
});
}
}
}).start();
}
postDelayed(Runnable)
//Button的点击事件
public void onClick(View view){
new Thread(new Runnable() {
@Override
public void run() {
while(i<100){
i++;
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
//0.8秒后开始更新UI
textView.postDelayed(new Runnable() {//加入UI线程,更新UI
@Override
public void run() {
textView.setText(i+"%");
}
},800);
}
}
}).start();
}