关闭

Android-Handle详细介绍及面试题

标签: AndroidHandle
1418人阅读 评论(0) 收藏 举报
分类:

Android-Handle

一 什么是Handle
Handle:
A Handler allows you to send and process Message and Runnable objects associated with a thread’s MessageQueue
一个Handle是允许你去和一个线程的消息队列去发送和接收消息的对象

你可以构造handle对象来与Looper沟通,以便push新消息到messageQueue里面,或者接收Looper(从Message Queue取出)所送来的消息
如下图:
这里写图片描述

Handle特点:
Handle实例与消息处理是关联的,发送和接收要匹配
Handle只能依附在HandleThread线程
Handle可以通过设置Looper来选择其依附的线程
Handle所有的操作都是在用一个线程
Handle的removeMessage函数只能移除队列中的Message

二 作用:
1,执行计划任务
主要使用的函数是:
postAtTime,postDelayed,sendMessageAtTime,sendMessageDelayed

2,线程间通讯
在android的应用启动的时候,会创建一个主线程,主线程会创建一个消息队列来处理各种消息
当你创建子线程的时候,你可以在你的子线程中拿到福线程中创建的Handle对象
由于Android要求在UI中更新界面,所以使用的最多的情况是在子线程中更新主线程的UI

3,确保操作始终在某个特定的线程中运行
例如当我们从数据库加载数据的时候,除了程序启动时需要加载外
每当我们收到数据改变的通知时也需要重新加载为了确定数据的有效性(始终使用最后一次查询得到的数据)
并减少不必要的查询操作,我们应当确保他们在同一个线程中运行

4,用到的概念:
线程:UI Thread通常就是main Thread, 而android启动程序会替他建立一个Message Queue

message:消息

messageQueue:消息队列,用来存放线程放入的消息

Looper:相当于隧道,一个线程可以产生一个Looper对象,由他来管理县城里面的messageQueue消息队列
Looper.myLooper直接得到当前线程的Looper
looper.getMainLooper得到UI主线程的Looper

Looper的实现原理:
类似于windows编程的消息机制
在Android中接收消息队列的消息,然后分发给Handle,
在windows中分发给window

误区:Handle不一定在主线程

三 面试题:
1,多个Handle使用同一个HandleThread的时候,同一个HandleThread中可以有多个Handle吗?
yes

2,多个Handle使用同一个HandleThread的时候,同一个HandleThread中使用多个Handle的Message会混淆吗?为什么?
No,因为每个Message都有一个对应的target
不管是post还是sendMessage,最后都是调用sendMessageAtTime,在同一个线程中,同一个队列中
附上Handle的源代码,方便大家查看及分析
http://pan.baidu.com/s/1bnEuvU3

3,Handle可以创建到任意的线程中吗?
不可以,只能在Looper.onLooperPrepared中创建Handle并发送消息

4,如何指定Handle运行的线程
只要指定Handle使用的Looper就可以指定运行的线程,提高了程序的灵活性

5,同一个Handle中不同的消息会同时执行吗?
不可能交叉执行,只有处理完一条消息才会去处理下一条消息

6,对于正在执行的Message, 调用RemoveMessage会有什么后果,消息会终止吗?
不会,一旦消息发送出去,RemoveMessage就无效,removeMessage只能
移除队列中的Message

例如用户快速的点击按钮,我的程序无法有足够快的相应,该怎么办?
先调用RemoveMessage移除相同的操作

7,使用Handle是异步的,它会建立新的线程吗
不会建立,只是在新的线程中运行

8,Handle是在主线程内吗?
不一定

9,Handle的post和sendMessage使用的是一个队列还是两个?
使用的相同的一个

0
0
查看评论

Android 面试精华题目总结

下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖。 1、请解释下在单线程模型中Message,Handler,Message Queue,Lopper之间的关系。 2、如果有个100M大的文件,需要上传至服务器中,而服务器f...
  • lmj623565791
  • lmj623565791
  • 2014-04-18 14:39
  • 179865

一个activity中多个handler和消息的处理过程

Ø  能否有多个handler handler的构造方法 public Handler() {          …. mLooper = Looper.myLooper(); mQ...
  • boliu123
  • boliu123
  • 2011-11-07 03:00
  • 7667

同一线程内多Handler使用浅析

做android开发的人都知道Handler处理机制,handler的出现就是为了保证UI线程安全,对UI的修改只有UI线程可以操作,不允许其他线程操作,下面对Handler异步消息处理机制再做一下简单的介绍: 1、成员介绍 Message:主要功能是进行消息的封装,同时可以指定消息的操作形式;...
  • u011573355
  • u011573355
  • 2016-02-25 13:56
  • 2790

常见Android面试题及答案(详细整理)

成功没有捷径,脚踏实地一步一个脚印,不好高骛远,不急功近利,付出总有回报,不管出于哪个阶段,都要一步一个脚印,踏实的走好每一步。让技术来强大自己,让技术改变世界。
  • Ericpengjun
  • Ericpengjun
  • 2016-03-16 10:10
  • 48086

linux 面试题及答案整理

在 Linux 中什么是平均负载? 答: 平均负载被定义为在1分钟,5分钟和15分钟内等待在运行队列中的进程数目和当前正在执行的进程数目之和的平均值。使用 ‘top’ 和 ‘uptime’ 命令我们可以查询一个 Linux 服务器的平均负载。 Puppet Master 在哪里存储...
  • ningxmeng
  • ningxmeng
  • 2016-09-29 10:48
  • 9356

web前端面试题及答案 JavaScript篇

1.null和undefined的区别?1,null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。 2,null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象;当声明的变量还未被初始化时,变量的默认值为undefined。 ...
  • qq_34753236
  • qq_34753236
  • 2016-05-03 17:20
  • 6412

Oracle精选面试题及答案

1.       查询员工表所有数据, 并说明使用*的缺点 答案: select* from emp; 使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。 2.     ...
  • u013349191
  • u013349191
  • 2014-02-08 16:33
  • 7394

web前端面试题及答案 css篇

1.CSS3有哪些新特性? CSS3实现圆角(border-radius), 阴影(box-shadow), 对文字加特效(text-shadow、), 线性渐变(gradient), 旋转(transform)transform:rotate(9deg) scale(0.85,0.90)...
  • qq_34753236
  • qq_34753236
  • 2016-04-29 11:46
  • 2664

SQL数据库面试题以及答案(50例题)

SQL数据库面试题以及答案(50例题)
  • hundan_520520
  • hundan_520520
  • 2017-02-05 15:13
  • 27371

收集的MySQL的面试题分享给大家

1、如何登陆mysql数据库mysql -u username -p2、如何开启/关闭mysql服务service mysql start/stop3、查看mysql的状态service mysql status4、如何显示数所有数据库show databases5、如何获取表内所有字段对象的名称和...
  • u010870518
  • u010870518
  • 2015-07-15 21:44
  • 8630
    个人资料
    • 访问:159222次
    • 积分:3331
    • 等级:
    • 排名:第11982名
    • 原创:209篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    博客专栏
    最新评论