您的位置:首页 > 产品设计 > UI/UE

浅谈Android几种更新UI的方式

2016-09-23 21:07 399 查看
通过handler发送Message并回调handler自己的handleMessage方法更新UI:

在一个非UI线程中发送Message

public class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Message message = handler.obtainMessage();
message.what = 0;
handler.sendMessage(message);
Thread.sleep(3000);
Message message1 = handler.obtainMessage();
message1.what = 1;
handler.sendMessage(message1);
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


调用handler自身的handleMessage方法

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
textView.setText("你好,世界!");
break;
case 1:
textView.setText("你好,程序员!");
break;
}
};


这种方式的优点在于结构清晰,功能明确,是比较推荐的一种更新UI的方式,但缺点是代码量偏大。

2.调用handler.post(Runnable r)方法更新UI:

public void onClick(View v) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
int i = index % 4;
index++;
imageView.setImageResource(images[i]);
handler.postDelayed(this, 3000);
}
}, 3000);


这种方式代码量要少一些,结构也较为简单,逻辑清楚,但其本质上还是利用handler发送Message的方式来更新UI。

3.在非UI线程中直接调用runOnUiThread()方法来更新UI:

new Thread("th2") {
@Override
public void run() {
try {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setTextSize(40);
textView.setText("ok");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}.start();


这种方法最好用,代码也简单易懂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ui 线程