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

Handler一些特点
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程)。
它有两个作用: (1)、安排消息或Runnable在某个主线程中某个地方执行;(2)安排一个动作在不同的线程中执行。

Handler中分发消息的一些方法
        post(Runnable)
        postAtTime(Runnable,long)
        postDelayed(Runnable long)
        sendEmptyMessage(int)
        sendMessage(Message)
        sendMessageAtTime(Message,long)
        sendMessageDelayed(Message,long)
        以上post类方法允许你排列一个Runnable对象到主线程队列中,
        sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

要更改UI界面内容只能在主线程里面进行,下面是一个实现在Android中,动态更改UI界面的内容:先启动一个线程timer,此线程负责对UI进行动态更改的具体操作,此外,再定义一个线程来负责主线程和timer线程的通信,此线程就是Handler!它是Runnable和Activity

转载于:https://www.cnblogs.com/tshq/p/5690037.html

Android Handler主线程和一般线程通信的应用分析相关推荐

  1. Android之HandlerThread源码分析和简单使用(主线程和子线程通信、子线程和子线程通信)

    1.先熟悉handler方式实现主线程和子线程互相通信方式,子线程和子线程的通信方式 如果不熟悉或者忘记了,请参考我的这篇博客     Android之用Handler实现主线程和子线程互相通信以及子 ...

  2. android子线程没有运行完,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    /* String ObjectResult="原先的结果"; //使用VOLLY框架(与问题无关) JsonObjectRequest jsonObjectRequest = n ...

  3. android广播怎样运行在子线程,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    抛开你这段代码不看,单根据你的标题来回答: android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢? 需要在子线程执行完成的地方,通过主线程的Handler发送一条消 ...

  4. Android的主线程与子线程

    在上一篇文章Android的进程.线程与优先级中我们提到: 线程(thread):是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程至少对应一个线程. CP ...

  5. Android,UI主线程与子线程

    在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Co ...

  6. android 线程传递数据,Android Handle主线程向子线程发送数据

    一.前言: 今天,下载apk的时候,下载进度回调到主线程,主线程刷新通知栏,造成页面阻塞掉,不能点击页面(下载结束后,可以正常点击页面). 所以,要在进度回调发送消息到子线程,在子线程的Handler ...

  7. android线程通信方式,Android 主线程和子线程通信问题

    Android 如今不支持View在子线程中创建及调用其方法.假设要实现子线程内容更新之后.将结果及时反馈到主线程中,该怎样出来呢? 能够在主线程中创建Handler来实现. 这样子线程的结果.能够通 ...

  8. 多线程,主线程与子线程的通信Handler Message sendmessage与handlemessage obtainmessage

    android是单线程的,在子线程中是不能修改UI线程的任何操作,所以要用一种方式让子线程中的信息返回到主线程中再做修改.这就要让主线程与子线程通信. 那如何让它们之间进行通信呢?我们用Handler ...

  9. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)

    Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...

最新文章

  1. 菲律宾谋定农业大建特建构想 对话国际农民丰收节贸易会
  2. Android CTS 测试总结【转】
  3. 音视频技术开发周刊 | 228
  4. 【高并发】面试官:性能优化有哪些衡量指标?需要注意什么?
  5. spring配置xml文件_XML配置文件中的Spring配置文件
  6. android 代码设置居右_Android 开发实现EditText 光标居右显示
  7. 《Algorithms》Java 语言特性
  8. C# Gabbage Collecting System
  9. 开课吧9.9元学python靠谱吗-开课吧的python课程怎么样,值得报名吗?
  10. 2020-我的后端开发秋招之路
  11. 爬楼梯算法-java(递归与非递归)
  12. WiFi PowerSave模式以及通过抓包判断是否生效
  13. 快手科技音视频技术亮相ChinaMM 首次公开多媒体传输协议KTP
  14. TSX 在Vue项目的使用
  15. python函数库分类及实例_Python中Scikit-Learn库的分类方法总览
  16. 固态硬盘能不能提高计算机速度,固态硬盘—提升电脑速度最有效的利器!
  17. Linux mmap 详解
  18. 用ajax接收后台数据里的具体数据,ajax动态接收后台向后台传输数据以及接收数据...
  19. 国内外量化平台发展现状简析
  20. xcode连接新的iPhone进行app调试教程

热门文章

  1. MacroMedia FreeHand中文版
  2. LeetCode周总结--第一周
  3. sql server取某个时间段内所有日期或者所有月份
  4. 【编程题】简单的四则运算
  5. 搭建App主流框架_纯代码搭建(OC)
  6. G - Strongly connected - hdu 4635(求连通分量)
  7. 数据结构之【树形结构】复习题
  8. 深入浅出mfc随笔——MFc程序的生死因果
  9. 分离解析DNS服务器
  10. Unity版本使用情况统计报告