Android规定仅仅能在主线程中更新UI。假设在子线程中更新UI 的话会提演示样例如以下错误:Only the original thread that created a view hierachy can touch its view((仅仅有原来的线程创建一个视图层次能够触摸它的视图)。

仅仅能在主线程中更新UI的原因是:android中相关的view和控件不是线程安全的,我们必须单独做处理。

有的时候须要再子线程中实现更新UI,以下介绍使用Handler实现线程通信的特点实如今子线程中更新UI。

Handler的使用场合:

1、 to schedule messages and runnables to be executed as some point in the future;

安排messages和runnables在将来的某个时间点运行。

2、 to enqueue an action to be performed on a different thread than your own.

将action入队以备在一个不同的线程中运行。即能够实现线程间通信。比方当你创建子线程时。你能够再你的子线程中拿到父线程中创建的Handler对象,就能够通过该对象向父线程的消息队列发送消息了。

因为Android要求在UI线程中更新界面,因此,能够通过该方法在其他线程中更新界面。

子线程更新UI实例:

步骤:

1、创建Handler对象(此处创建于主线程中便于更新UI)。

2、构建Runnable对象。在Runnable中更新界面。

3、在子线程的run方法中向UI线程post,runnable对象来更新UI。

具体代码例如以下:

  1. package djx.android;
  2.  
  3. import djx.downLoad.DownFiles;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.TextView;
  11.  
  12. public class downLoadPractice extends Activity {
  13. private Button button_submit=null;
  14. private TextView textView=null;
  15. private String content=null;
  16. private Handler handler=null;
  17. /** Called when the activity is first created. */
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. //创建属于主线程的handler
  23. handler=new Handler();
  24.  
  25. button_submit=(Button)findViewById(R.id.button_submit);
  26. textView=(TextView)findViewById(R.id.textView);
  27. button_submit.setOnClickListener(new submitOnClieckListener());
  28. }
  29. //为按钮加入监听器
  30. class submitOnClieckListener implements OnClickListener{
  31. @Override
  32. public void onClick(View v) {
  33. //本地机器部署为server。从本地下载a.txt文件内容在textView上显示
  34. final DownFiles df=new DownFiles("http://192.168.75.1:8080/downLoadServer/a.txt");
  35. textView.setText("正在载入......");
  36. new Thread(){
  37. public void run(){
  38. content=df.downLoadFiles();
  39. handler.post(runnableUi);
  40. }
  41. }.start();
  42. }
  43.  
  44. }
  45.  
  46. // 构建Runnable对象。在runnable中更新界面
  47. Runnable runnableUi=new Runnable(){
  48. @Override
  49. public void run() {
  50. //更新界面
  51. textView.setText("the Content is:"+content);
  52. }
  53.  
  54. };
  55.  
  56. }

參考网址:

1.
http://blog.csdn.net/djx123456/article/details/6325983

2. 具体线程具体解释链接http://lavasoft.blog.51cto.com/62575/27069/

使用Handler在子线程中更新UI的更多相关文章

  1. Android在子线程中更新UI(二)

    MainActivity如下: package cc.testui2; import android.os.Bundle; import android.view.View; import andro ...

  2. Android在子线程中更新UI(一)

    MainActivity如下: package cc.testui1; import android.os.Bundle; import android.os.Handler; import andr ...

  3. android 不能在子线程中更新ui的讨论和分析

    问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...

  4. Android多线程之(一)View.post()源码分析——在子线程中更新UI

    提起View.post(),相信不少童鞋一点都不陌生,它用得最多的有两个功能,使用简便而且实用: 1)在子线程中更新UI.从子线程中切换到主线程更新UI,不需要额外new一个Handler实例来实现. ...

  5. 如何在子线程中更新UI

    一:报错情况 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that creat ...

  6. Android开发UI之在子线程中更新UI

    转自第一行代码-Android Android是不允许在子线程中进行UI操作的.在子线程中去执行耗时操作,然后根据任务的执行结果来更新相应的UI控件,需要用到Android提供的异步消息处理机制. 代 ...

  7. C#子线程中更新ui

    本文实例总结了C#子线程更新UI控件的方法,对于桌面应用程序设计的UI界面控制来说非常有实用价值.分享给大家供大家参考之用.具体分析如下: 一般在winform C/S程序中经常会在子线程中更新控件的 ...

  8. Android 在子线程中更新UI

    今天在做练习时,在一个新开启的线程中调用“Toast.makeText(MainActivity.this, "登陆成功",Toast.LENGTH_SHORT).show();” ...

  9. 老问题:Android子线程中更新UI的3种方法

    在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...

随机推荐

  1. Comparable与Comparator源码分析

    package java.lang; import java.util.*; /** * This interface imposes a total ordering on the objects ...

  2. python程序中用类变量代替global 定义全局变量

    在python编程中,一般使用global 关键字来定义全局变量,但是发现 global 关键字在涉及多个文件时,好像存在问题. 比如,单个文件下用global定义使用全局变量的情况 ,看下面的代码 ...

  3. Mac OS X10.9安装的Python2.7升级Python3.4步骤详解

    Mac OS X10.9安装的Python2.7升级Python3.4步骤详解 Mac OS X10.9默认带了Python2.7,不过现在Python3.4.0出来了,如果想使用最新版本,赶紧升级下 ...

  4. Scrapy中的核心工作流程以及POST请求

    五大核心组件工作流程 post请求发送 递归爬取 五大核心组件工作流程 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, ...

  5. A - Translation

    Problem description The translation from the Berland language into the Birland language is not an ea ...

  6. P3808 【模版】AC自动机(简单版)

    题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本 ...

  7. Three.js入门——画星空(star field)

    Three.js是一个很流行的3D JavaScript库.这里有一个three.js的入门教程,在浏览器窗口中画出星空.我按照教程重新实现了一遍,这里的这篇博客把教程大致翻译了一遍.我的demo. ...

  8. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

  9. spring中quatz的多定时任务配置图文详解

    近来公司让用quatz框架做定时功能,而且还是执行多定时任务,真是苦恼. 虽然从网上搜了很多资料,但是写法上不太尽如人意,最后还是请教了螃蟹大神,给的配置建议就是简单啊,现在拿来分享下: 这里我们需要 ...

  10. ML一:python的KNN算法

    (1):list的排序算法: 参考链接:http://blog.csdn.net/horin153/article/details/7076321 示例: DisListSorted = sorted ...