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

android如何在子线程中更新UI

2014-05-13 21:49 633 查看
/**
* 1,android为什么要在UI线程中修改UI?
* 	答:因为android的UI组件不是线程安全的,所以android使用UI线程(单线程)中来修改UI组件,确保UI组件不会被不同线程同一时间修改
*
* 2,handler机制?
*  答:又称消息机制,掌握消息机制需要了解5个对象:
*  	Message:消息对象,可以携带数据,msg.what,msg.obj,创建的msg对象都会关联一个handler实例对象,所有即时有n个handler处理消                息,也不会乱套
*  	MessageQueue:消息队列,存放了msg的顺序,按照先进先出的顺序,给handlder分发处理,可以通过msg.when来设置时间
*  	Handler:分发,处理消息
*  	HandlerThread:负责调度消息循环,可以理解成为消息循环的场所
*  	Looper:消息泵,其实是一个阻塞的while循环,不断地从消息队列中提取消息,有消息需要处理,就调用msg.target.dispatchMessage(msg)分发消息,调用handleMessage(msg)处理消息
*/

方法一:
new Thread(new Runnable() {

@Override
public void run() {
handler.sendEmptyMessage(0);
}
}).start();

Handler handler = new Handler(){
public void handleMessage(Message msg) {
if(msg.what==0){
//更新UI
}
};
};

方法二:
new Thread(new Runnable() {

@Override
public void run() {
view_gril.post(new Runnable() {

@Override
public void run() {
//更新UI
}
});

}
}).start();

方法三:
runOnUiThread(new Runnable() {

@Override
public void run() {
//更新UI
}
});

方法四:
private class MyAsyncTask extends AsyncTask<string void="" string="">{

@Override
protected String doInBackground(String... params) {
return null;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//更新UI
}

new MyAsyncTask().execute("");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: