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

4种线程中操作UI

2015-07-31 11:28 453 查看
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。

方法一:Handler

子线程调用Handler的sendMessage(message)发送事件。

view
sourceprint?

01.
mHandler
=
new
Handler()
{


02.
@Override


03.
public
void
handleMessage(Message
msg) {


04.
//操作界面


05.
myText.setText(
来自网络的信息);


06.
super
.handleMessage(msg);


07.
}


08.
};


09.
public
class
MyThread
extends
Thread
{


10.
public
void
run()
{


11.
​
​    ​
//
耗时操作


12.
​
​    ​​loadNetWork();


13.
Message
msg =
new
Message();


14.
mHandler.sendMessage(msg);
//向Handler发送消息,


15.
}


16.
}


方法二:View.post(Runnable )

view
sourceprint?

01.
public
void
onClick(
View v ) {


02.
new
Thread(
new
Runnable()
{


03.
public
void
run()
{


04.
//
耗时操作


05.
​
​    ​​    ​    ​      loadNetWork();


06.
​
myText.(
new
Runnable()
{


07.
myText.setText(
来自网络的信息);


08.
});


09.
}


10.
}).start();


11.
}


方法三:Activity.runOnUiThread(Runnable )

与view.post类似

view
sourceprint?

01.
public
void
onClick(
View v ) {


02.
new
Thread(
new
Runnable()
{


03.
public
void
run()
{


04.
//
耗时操作


05.
​
​    ​​    ​    ​      loadNetWork();


06.
​
Activity.runOnUiThread.(
new
Runnable()
{


07.
myText.setText(
来自网络的信息);


08.
});


09.
}


10.
}).start();


11.
}


方法四:AsyncTask

view
sourceprint?

01.
//UI线程中执行


02.
new
DownloadImageTask().execute(
"www.91dota.com"
);


03.


04.
view
plain


05.
private
class
LoadTask
extends AsyncTask {


06.
protected
String
doInBackground( String... url ) {


07.
return
loadDataFormNetwork(
url[0] );
//后台耗时操作


08.
}


09.


10.
protected
void
onPostExecute(
String result ) {


11.
myText.setText(
result );
//得到来自网络的信息刷新页面


12.


13.
}


14.


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