众所周知Android是不允许在非UI线程中更新(修改)UI的,那么我们又该如何在非UI线程中更新(修改)UI呢?Android为我们提供了Handler,使用Handler可以让我们在非UI线程中更新(修改)UI。
那么下面就介绍一下Handler的用法:
用法一:
new Thread() {
public void run() {
try {
// 休眠一秒
Thread.sleep(1000);
//Handler handler = new Handler()
handler.post(new Runnable() {
@Override
public void run() {
//TextView tv = (TextView)findViewById(R.id.tv);
//在Runnable中改变UI
tv.setText("我改变了");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
用法二:
private MyRunnable mRunnable = new MyRunnable();
class MyRunnable implements Runnable{
@Override
public void run() {
//int i = 60
tv.setText(--i+"");
//Handler handler = new Handler();
//一秒钟调用一次
handler.postDelayed(mRunnable, 1000);
}
}
//在需要调用的地方写上“handler.postDelayed(mRunnable, 1000);”
用法三:
//Handler handler
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//TextView tv = (TextView) findViewById(R.id.tv);
tv.setText("arg1="+msg.arg1+"&arg2="+msg.arg2);
}
};
new Thread(){
public void run() {
try {
Thread.sleep(1000);
Message message = new Message();
//或者是Message message = handler.obtainMessage();
message.arg1 = 123;
message.arg2 = 321;
//除了将arg1和arg2发送之外还可以通过message.obj发送一个对象
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();