Android 在其他线程中更新UI线程的解决方法
程序员文章站
2023-11-20 17:49:16
方法一:activity.runonuithread(runnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,activity.runonuithread(...
方法一:activity.runonuithread(runnable )
(经验之道: 这个最好用, 凡是要刷新页面的地方,
activity.runonuithread( new runnable()
{ public void run(){更新ui}}
);
方法二:子线程调用handler的sendmessage(message)发送事件。
mhandler = new handler() {
@override
public void handlemessage(message msg) {
//操作界面
mytext.settext( 来自网络的信息);
super.handlemessage(msg);
}
};
public class mythread extends thread {
public void run() {
// 耗时操作
loadnetwork();
message msg = new message();
mhandler.sendmessage(msg);//向handler发送消息,
}
}
方法三:view.post(runnable )
public void onclick( view v ) {
new thread( new runnable() {
public void run() {
// 耗时操作
loadnetwork();
mytext.( new runnable() {
mytext.settext( 来自网络的信息);
});
}
}).start();
}
方法四:asynctask
//ui线程中执行
new downloadimagetask().execute( "www.91dota.com" );
private class downloadimagetask extends asynctask {
protected string doinbackground( string... url ) {
return loaddataformnetwork( url[0] );//后台耗时操作
}
protected void onpostexecute( string result ) {
mytext.settext( result ); //得到来自网络的信息刷新页面
}
}
(经验之道: 这个最好用, 凡是要刷新页面的地方,
activity.runonuithread( new runnable()
{ public void run(){更新ui}}
);
方法二:子线程调用handler的sendmessage(message)发送事件。
复制代码 代码如下:
mhandler = new handler() {
@override
public void handlemessage(message msg) {
//操作界面
mytext.settext( 来自网络的信息);
super.handlemessage(msg);
}
};
public class mythread extends thread {
public void run() {
// 耗时操作
loadnetwork();
message msg = new message();
mhandler.sendmessage(msg);//向handler发送消息,
}
}
方法三:view.post(runnable )
复制代码 代码如下:
public void onclick( view v ) {
new thread( new runnable() {
public void run() {
// 耗时操作
loadnetwork();
mytext.( new runnable() {
mytext.settext( 来自网络的信息);
});
}
}).start();
}
方法四:asynctask
复制代码 代码如下:
//ui线程中执行
new downloadimagetask().execute( "www.91dota.com" );
private class downloadimagetask extends asynctask {
protected string doinbackground( string... url ) {
return loaddataformnetwork( url[0] );//后台耗时操作
}
protected void onpostexecute( string result ) {
mytext.settext( result ); //得到来自网络的信息刷新页面
}
}