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

方法一:Handler

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

Java代码
  1. mHandler=newHandler(){
  2. @Override
  3. publicvoidhandleMessage(Messagemsg){
  4. //操作界面
  5. myText.setText(来自网络的信息);
  6. super.handleMessage(msg);
  7. }
  8. };
mHandler = new Handler() {   @Override   public void handleMessage(Message msg) {        //操作界面       myText.setText( 来自网络的信息);      super.handleMessage(msg);   }  };

Java代码
  1. publicclassMyThreadextendsThread{
  2. publicvoidrun(){
  3. ​​​//耗时操作
  4. ​​​​loadNetWork();
  5. Messagemsg=newMessage();
  6. mHandler.sendMessage(msg);//向Handler发送消息,
  7. }
  8. }
public class MyThread extends Thread {     public void run() {​    ​    ​    // 耗时操作​    ​    ​    ​loadNetWork();            Message msg = new Message();            mHandler.sendMessage(msg);//向Handler发送消息,      } }



方法二:View.post(Runnable)

Java代码
  1. publicvoidonClick(Viewv){
  2. newThread(newRunnable(){
  3. publicvoidrun(){
  4. //耗时操作
  5. ​​​​​​loadNetWork();
  6. ​myText.(newRunnable(){
  7. myText.setText(来自网络的信息);
  8. });
  9. }
  10. }).start();
  11. }
public void onClick( View v ) {        new Thread( new Runnable() {                public void run() {                       // 耗时操作​    ​    ​    ​    ​    ​      loadNetWork();​                          myText.( new Runnable() {                                  myText.setText( 来自网络的信息);                          });                 }        }).start();}



方法三:Activity.runOnUiThread(Runnable)
与view.post类似

Java代码
  1. publicvoidonClick(Viewv){
  2. newThread(newRunnable(){
  3. publicvoidrun(){
  4. //耗时操作
  5. ​​​​​​loadNetWork();
  6. ​Activity.runOnUiThread.(newRunnable(){
  7. myText.setText(来自网络的信息);
  8. });
  9. }
  10. }).start();
  11. }
public void onClick( View v ) {        new Thread( new Runnable() {                public void run() {                       // 耗时操作​    ​    ​    ​    ​    ​      loadNetWork();​                         Activity.runOnUiThread.( new Runnable() {                                  myText.setText( 来自网络的信息);                          });                 }        }).start();}



方法四:AsyncTask

Java代码
  1. //UI线程中执行
  2. newDownloadImageTask().execute("www.91dota.com");
 //UI线程中执行 new DownloadImageTask().execute( "www.91dota.com" );

Java代码
  1. privateclassLoadTaskextendsAsyncTask{
  2. protectedStringdoInBackground(String...url){
  3. returnloadDataFormNetwork(url[0]);//后台耗时操作
  4. }
  5. protectedvoidonPostExecute(Stringresult){
  6. myText.setText(result);//得到来自网络的信息刷新页面
  7. }
  8. }

from:http://iaiai.iteye.com/blog/1183681

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. Android之Socket通信
  3. Android(安卓)系统Handler用法简介
  4. Android拾萃 - RxJava5种响应类型的区别和背压(三)
  5. Android应用程序模型:应用程序,任务,进程,线程
  6. Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
  7. Android客户端与服务器之间的通信
  8. ANDROID GridView 分页平滑滑动 效果的实现(基于android TV遥控器
  9. Android(安卓)Looper用法及原理

随机推荐

  1. Android(安卓)设备关闭实体按键
  2. AndroidUI设计之 布局管理器 - 详细解析
  3. Android利用Fiddler进行网络数据抓包
  4. Android(安卓)NDK
  5. android的四种启动方式和各自特点
  6. Android(安卓)Studio 之一个项目的不同视
  7. android平台下基于OpenSL ES实现音频录制
  8. Android开发者官网:Android(安卓)4.4发布1
  9. 解决Only the original thread that crea
  10. Android移植到mini2440(进行中)