4种线程中访问Ui界面的方法
2015-08-04 22:36
519 查看
/article/9090339.html
点击打开链接
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。
方法一:Handler
子线程调用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<span style="color: #ff0000; white-space: normal;">.post</span>( new Runnable() {
myText.setText( 来自网络的信息);
});
}
}).start();
}
方法三:Activity.runOnUiThread(Runnable )
与view.post类似
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
// 耗时操作
loadNetWork();
Activity.runOnUiThread.( new Runnable() {
myText.setText( 来自网络的信息);
});
}
}).start();
}
方法四:AsyncTask
//UI线程中执行
new DownloadImageTask().execute( "www.91dota.com" );
private class LoadTask extends AsyncTask {
protected String doInBackground( String... url ) {
return loadDataFormNetwork( url[0] );//后台耗时操作
}
protected void onPostExecute( String result ) {
myText.setText( result ); //得到来自网络的信息刷新页面
}
}
点击打开链接
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。
方法一:Handler
子线程调用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<span style="color: #ff0000; white-space: normal;">.post</span>( new Runnable() {
myText.setText( 来自网络的信息);
});
}
}).start();
}
方法三:Activity.runOnUiThread(Runnable )
与view.post类似
public void onClick( View v ) {
new Thread( new Runnable() {
public void run() {
// 耗时操作
loadNetWork();
Activity.runOnUiThread.( new Runnable() {
myText.setText( 来自网络的信息);
});
}
}).start();
}
方法四:AsyncTask
//UI线程中执行
new DownloadImageTask().execute( "www.91dota.com" );
private class LoadTask extends AsyncTask {
protected String doInBackground( String... url ) {
return loadDataFormNetwork( url[0] );//后台耗时操作
}
protected void onPostExecute( String result ) {
myText.setText( result ); //得到来自网络的信息刷新页面
}
}
相关文章推荐
- 输入一个字符串,如果第一个字符是大写并且其他字符不是大写,那么输出true,否则输出false。
- UI 04 代理设计模式
- iOS开发UI基础—手写控件,frame,center和bounds属性
- N-Queens
- UI04_UIDelegate
- VistualStudio 2005 设置PowerBuilder12.5 PBNI编绎命令行。
- UI 04 target...action 设计模式
- iOS开发——UI进阶篇(十六)Quartz2D实战小例子
- HDU1.2.6 Buildings
- UVA1152 4Values whose Sum is 0
- HDU 5301 Buildings
- DPDK 的 uio 以及 PMD 机制的实现
- minicom question
- 记录一下iOS的几个UIView的方法
- UI 03 自定义的Label-TextField视图 --- LTView
- iOS开发——UI进阶篇(十五)Quartz2D介绍
- UISwitch设置代理人 帮助实现变换背景颜色
- ios学习(UITabBarController)
- poj 2299 Ultra-QuickSort (树状数组+离散化)
- HD1047 Integer Inquiry 【大数问题】