衆所周知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();