android handler工作原理

作用

便于在子线程中更新主UI线程中的控件
这里涉及到了UI主线程和子线程

UI主线程

它很特别。通常我们会认为UI主线程将页面绘制完成,就结束了。但是它没有。它在一直默默等待着来自用户操作控件发生的事件消息。

  • 这里的事件和其中包含的信息都被封装为一个message,它是Parcelable对象。
  • 主线程不能同时处理所有的事件,这个时候就需要一个存放消息的队列message queue
  • 它里面包含了一个叫looper,用来管理这个消息池子
  • handler在其中负责发送和处理事件
  • 去查看Activity中的源码,会发现它会自己创建一个final类型的handler,还有looper的身影。

looper

  • 这个用来管理messageQueue的,主要的执行方法在looper.loop()方法中。大家都这么说
  • UI主线程会给自己创建一个looper对象。子线程的looper需要手动的创建。
  • 当handler在UI主线程上进行实例化的时候,自动持有主线程的looper。

messageQueue

它叫队列,之前以为它里面会有Array或者List之类的,但是在源码里面没有看到。
它队列的实现,是通过message对象中的属性变量next,来指向下一个message

message

消息对象的实体

handler

它的内部实现包含子线程thread、回调函数callback、成员变量looper
每当handler调用sendMessage()(或者其它类似相关方法)的时候,将会向messageQueue里面添加一个message。添加的时候会去检查该message与队列中已经存在的message的when属性,判断谁在前谁在后
其实,两条线程之间的数据交互,一般采用回调方法。handler的实现原理也是依据如此。

具体的使用方法

  • 在UI主线程中调用没有参数的构造方法创建Handler的时候,使用的looper对象就是主线程的Looper
  • 在子线程中调用没有参数的构造方法创建handler的时候,需要主动创建looper对象:Looper.prepare()方法;不然在运行的时候就会报错说"Can't create handler inside thread that has not called Looper.prepare()"
  • 在子线程中可以将主线程的looper作为构造方法的参数创建handler,就不需要在子线程中创建自己的looper了。这个时候回调方法handleMessage(Message msg)方法将会放在主线程中执行,所以这里面不要放特别耗时的操作。
    Handler mHandler =new Handler(Looper.getMainLooper())
  • 在activity中的handler中含有未执行的delay消息的时候,调用activity.onFinish()方法之后,onDestory()不会立刻被调用。所以一般情况下,在调用onFinish()方法的时候需要清理一下mhandler里面的消息

android handler工作原理的更多相关文章

  1. Android ListView工作原理完全解析,带你从源码的角度彻底理解

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据   转载请注明出处:h ...

  2. Android ListView工作原理全然解析,带你从源代码的角度彻底理解

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...

  3. Android Widget工作原理详解(一) 最全介绍

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/46853033 ; Widget是安卓的一应用程序组件,学名窗口小部件,它是微型应用 ...

  4. Android ListView工作原理完全解析(转自 郭霖老师博客)

    原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListVie ...

  5. [旧][Android] View 工作原理(二)

    备注 原发表于2016.05.27,资料已过时,仅作备份,谨慎参考 前言 本文大量参照<Android 开发艺术探索>及参考资料的内容整合,主要帮助自己理清 View 的工作原理.深入学习 ...

  6. [旧][Android] View 工作原理(一)

    备注 原发表于2016.05.23,资料已过时,仅作备份,谨慎参考 前言 本文参考<Android 开发艺术探索>及网上各种资料进行撰写,目的是为自己理清 Android 中 View 的 ...

  7. android——handler机制原理

    在android版本4.0及之后的版本中多线程有明确的分工,子线程可以写所有耗时的代码(数据库.蓝牙.网络服务),但是绝对不能碰UI,想碰UI跟着主线程走,那么我们如何才能让主线程知道我们要对 UI进 ...

  8. android handler 调用原理

    1,调度原理 andriod提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange) ...

  9. 移动端自动化测试之Appium的工作原理学习

    Appium 简介 参考官网文档说明:http://appium.io/docs/en/about-appium/intro/ Appium官方文档上介绍,Appium 是一个自动化测试的开源工具,支 ...

随机推荐

  1. MongoDB(三)mongoDB下载和安装

    软件下载 下载mongodb最新的包:http://www.mongodb.org/downloads 下载mongodb可视化界面,mongoVUE:http://download.csdn.net ...

  2. CFileDialog 打开文件夹文件 保存文件夹文件

    格式说明: explicit CFileDialog(    BOOL bOpenFileDialog,                         //TRUE 为打开, FALSE 为保存 L ...

  3. HTML静态网页(框架)

    1.frameset frameset最外层,使用时需要去除body改用frameset. <frameset  rows="100,*" frameborder=" ...

  4. spring jar包冲突

    在用Spring+Hibernate做项目时候遇到java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 网上查得答案 环境 ...

  5. Android NDK开发(1)----- Java与C互相调用实例详解

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/13/2394153.html 一.概述 对于大部分应用开发者来说可能都不怎么接触到NDK,但如果 ...

  6. (转)Windows重启延迟删除,重命名技术原理

    所谓重启延迟删除技术,就是在操作系统启动前删除或者替换文件! 说起重启延迟删除,大家可能都很陌生,但是实际上,该功能已经被各种软件所采用:如安装Windows 补丁程序(如:HotFix.Servic ...

  7. BZOJ 1114 Number theory(莫比乌斯反演+预处理)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738 题意:给你一个整数序列a1, a2, a3, ... , ...

  8. Mybatis学习之JDBC缺陷

    1.JDBC存在的问题 1.将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决?(将sql单独 配置在配置文件中) 2.数据库连接 ...

  9. [LeetCode]题解(python):099-Recover Binary Search Tree

    题目来源: https://leetcode.com/problems/recover-binary-search-tree/ 题意分析: 二叉搜索树中有两个点错了位置,恢复这棵树. 题目思路: 如果 ...

  10. android sdk 下载缓慢的问题

    原文地址:http://www.oschina.net/question/265039_173445#tags_nav 1.在Android SDK Manager Setting 窗口设置 HTTP ...