Handler主要接受子线程发送的数据, 并用此数据配合主线程更新UI..

当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发。比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示  "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.,来解决这个复杂的问题 ,    由于Handler运行在主线程中(UI线程中),  它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

我们先来看一下handler的简单使用方法

package com.example.android_handler_textview;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity {private Button button;private static TextView textView;private MyHandler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button1);textView = (TextView) this.findViewById(R.id.msg);handler = new MyHandler();button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new MyThread()).start();}});}public static  class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);int arg1 = msg.arg1;String name = (String) msg.obj;textView.append(name + arg1);}}public class MyThread implements Runnable {int count = 0;@Overridepublic void run() {// TODO Auto-generated method stubwhile (count <= 20) {try {Thread.sleep(500);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}// 从消息池中获取消息,如果没有消息,创建一个消息,如果有,则取出来消息携带数据,由handler发送Message message = Message.obtain();message.arg1 = count;message.obj = "jack";count++;handler.sendMessage(message);}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

Android开发之Handler的使用方法(源代码分享)相关推荐

  1. Android开发之android_apk 在线安装(源代码分享)

    android_apk的在线安装,除了要设计Android 客户端的代码外,还要搭建服务器的代码,仿真实现中Android软件的在线升级. Android  客户端的代码截图如下. MainActiv ...

  2. Android开发之sdcard读写数据(源代码分享)

    package com.example.f01_sdcard01;import java.io.File; import java.io.FileNotFoundException; import j ...

  3. Android开发之Socket通信的方法

    老套图上图: 如上所示: 我这边定义了两个APP一个是server端一个是客户端 步骤: 先安装服务端APP,再安装客户端APP,然后打开客户端APP后悔自动打开服务端的service然后开启服务端的 ...

  4. Android开发之Handler

    Handler 定义与作用 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序启动时,Android 首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进 ...

  5. Android开发之Handler和Looper的关系

      关于Handler的总结. Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理. Handler:处理者,负责Mes ...

  6. Android开发之Handler机制记录

    1.Handler 机制 说到 Handler,就不得不提与之密切相关的这几个类:Message.MessageQueue,Looper: Message: Message 中有两个成员变量值得关注: ...

  7. Android开发之SQLite的使用方法

    前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不 ...

  8. android 视频开发sd卡,Android开发之SD卡文件操作分析

    本文实例讲述了Android开发之SD卡文件操作.分享给大家供大家参考,具体如下: 前面的文章中写过直接操作手机自带存储器的程序,这次就接着上次文章协议下对sd卡的文件操作.与自带存储不同的是使用sd ...

  9. android开发集成flash,Android开发之Adobe flash操作工具类

    本文实例讲述了Android开发之Adobe flash操作工具类.分享给大家供大家参考,具体如下: public class AdobeUtil { /** * 安装flash插件 */ publi ...

最新文章

  1. c4android资源,OpenC4Android开发环境搭.doc
  2. android广播第三方库,Android Support 库:LocalBroadcastManager
  3. android t类型参数,数据绑定Android – 类型参数T具有不兼容的上限:ViewDataBinding和MainActivity...
  4. php中循环跳过,php for循环的exit / break / continue /goto 停止、跳过循环、继续循环...
  5. 麒麟9000芯片的库存真就是个迷
  6. js实现页面滚动,菜单固定
  7. 【lpxt】笔者支招:九招搞定显示器黑屏
  8. 各类软硬件简易资料830个共2.1G,感兴趣的小伙伴自行下载
  9. 宏观视角看抖音全生态
  10. Html和css算是编程语言吗,不被承认的编程语言
  11. 老一辈学计算机的在那,真实的南京大学计算机系
  12. 相见恨晚 linux下的c++filt 命令
  13. ubuntu 分区大小调整_如何调整Ubuntu分区的大小
  14. html css动漫素材,66种特效的CSS3动画库animate.css
  15. python查文章字数
  16. 微信公众号普通消息接收接口
  17. MFC添加界面的背景图片方法总结
  18. 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
  19. 集成显卡和独立显卡哪个好 集成显卡与独立显卡区别
  20. Lambda表达式语法 (二)

热门文章

  1. php多图片上传程序,php多文件上传 多图片上传程序代码
  2. java awt 监视器_java – 停止所有Awt / Swing线程和监视器和东...
  3. 对抗生成网络_深度卷积生成对抗网络
  4. Winform控件:打开文件对话框(OpenFileDialog)
  5. inventor应用程序错误---解决方法
  6. [唐诗]入朝洛堤步月-上官仪
  7. win7清除系统托盘图标的方法
  8. @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别...
  9. 移动应用性能测试白皮书
  10. 深入浅出说编译原理(一)