论Hander机制 (另一个账号 2016-01-12 16:37)

简单说一下hander机制,这个Android基本必问的一道题!!!

面试过几个应聘者回答的都不是很好!


分条清晰回答,

1.Hander长什么样子,当然就是说它是一个什么,

2.Hander是干啥用的

3.列举一些应用场景

4.再加上形象的比喻分析其原理

平时给教的几个学生整天分析Java和Android知识,就是初学的理解不是很深刻么,就给他各种解释,常常比喻成现实中的实物,然后就很形象深刻的记住了。把一个很难的知识点尽量通俗化,白居易写诗让老太太都能看懂,这依然是好诗,易于传播,易于记忆就是好的么。讲着讲着就想起了初中课文上一篇说明文上列举的说明方法,只记得几个,举例子,下定义什么的后来百度查了一下。

举列子、作比较,下定义,作诠释,打比方(明喻,暗喻,借喻)、摹状貌,引资料,分类别,列数字,画图表,等等。

编程语言比较抽象,能把抽象的问题具体化,形象化,他们学起来就不害怕了。

[java]  view plain  copy
  1. Handler hander = new Handler(){  
  2.         @Override  
  3.         public void handleMessage(Message msg) {  
  4.             String data;  
  5.             super.handleMessage(msg);  
  6.             switch (msg.what) {  
  7.             case 101:// 河南  
  8.                 data = (String) msg.obj;  
  9.                 // 对数据进行处理,粘胶布,贴大字,放到车上去  (非耗时操作)  
  10.                 break;  
  11.             case 102:// 北京  
  12.                 data = (String) msg.obj;  
  13.                 // 对数据进行处理,粘胶布,贴大字,放到车上去  (非耗时操作)  
  14.                 break;  
  15.             case 103:// 广州  
  16.                 data = (String) msg.obj;  
  17.                 // 对数据进行处理,粘胶布,贴大字,放到车上去  (非耗时操作)  
  18.                 break;  
  19.             default:  
  20.                 break;  
  21.             }  
  22.         }  
  23.     };  



[java]  view plain  copy
  1. /** 
  2.  * 发送北京河南的 
  3.  * @param mypackage 
  4.  */  
  5. public void sendPackage(final String mypackage){  
  6.     new Thread(){  
  7.         @Override  
  8.         public void run() {  
  9.             super.run();  
  10.             Message msg = new Message();  
  11.             if (mypackage.equals("HeNan")) {  
  12.                 msg.obj = "河南邮件";  
  13.                 msg.what = 101;  
  14.             }else if(mypackage.equals("BeiJing")){  
  15.                 msg.obj = "北京邮件";  
  16.                 msg.what = 102;  
  17.             }  
  18.             hander.sendMessage(msg);  
  19.         }  
  20.           
  21.     }.start();  
  22. }  
  23. /** 
  24.  * 发送广州的 
  25.  * @param mypackage 
  26.  */  
  27. public void sendGuangzhouComputer(final String mypackage){  
  28.     new Thread(){  
  29.         @Override  
  30.         public void run() {  
  31.             super.run();  
  32.             Message msg = new Message();  
  33.             msg.what = 103;  
  34.             msg.obj = "广州包裹";  
  35.             hander.sendMessage(msg);  
  36.         }  
  37.           
  38.     }.start();  
  39. }  

当多个线程同时发送消息的时候,你也扔过来一箱,我也扔过来一箱,就是发送的有很多人,而处理的却要有条不紊依次去处理,所以这些货物要放在一个队列里面 Queue  然后呢由Looper 就是传送带,传送带一个死循环,一直看队列里面有消息没有,有了就网上运输,而Hander相当于招的快递处理员,及进行搬运发送邮件,也写大字处理邮件,然后分给各个货车,从而实现有序处理。


代码贴的比较少,但是我相信有点Android基础的仔细想想这个场景,一拍脑袋,恍然大悟。什么高深的Handler机制,也不过是快递传送带处理而已,原理相似。仔细理解之后就会很深刻。


那么来回答上面提出的四个问题!

什么是Handler呢,Handler他不是接口,也不是抽象类,是一个实实在在的实体里。

有啥功能?

1.发送消息sendMessage。

2.处理消息handlerMessage。

其他还有暂不关心这是最核心的两个功能

作用呢,就是解决主线程MainThread和子线程new Thread()之间的通信,

主线程不能执行耗时操作,超五秒就会ANR异常,就是手机无响应,所以耗时操作就放在子线程里面,

在子线程把大枣加工,夹核桃夹仁,或者花生,复杂的耗时处理,都扔子线程,处理完了。就利用Handler

即员工贴贴大字,放到车上这些不是很耗时的操作。

3.应用场景,就是


另一个账号 http://blog.csdn.net/rememberthedream/article/details/50505193


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值