和其他面试点一样,我将 通过自己学习源码,来总结可能出现的问题点。再次鼓励的大家通过源码学习Android或者其他语言的知识,源码之下,毫无隐瞒。
Handler作为Android中重要的一个类,在面试中经常被问到,也是Android跨线程通讯的好手段。

  • 谈一谈Handler在Android中的主要用途

    1. 安排Message或者Runnable对象在本线程中指定时间点执行
    2. 让message或者Runnable在其他线程执行。
  • 是否使用过Handler(Handler.Callback)来构造Handler对象?Handler.Callback的主要用途
    是,该构造方法的参数的是一个接口,通过实现该接口的handleMessage方法可以自行处理message信息,该方法的目的就是让其他实现该接口的对象,自行处理相关信息,而不用复写内部类的handlemesssage。

  • 简单说明一下Handler从发送到处理一个message的流程。
    之前在Looper中讲到过,Looper比作自动运行的传送带, Handler比作机械手臂 message就是一个个的包裹,而MessageQueue就是盒子组成的队列。Handler通过SendMessage方法将message放进Handler绑定的Looper.meesageQueue中,而Looper在调用Looper.loop方法的时候,就会一直查看message的相关信息,最主要的是看它会被哪个Handler处理,这时候会调用msg.target.dispatchMessage方法,而在该方法中,会判断该message是否存在callback对象,如果有的话,则会交给对应的callback对象处理,如果没有则判断自己的Handler.Callback是不是null,如果不是则交给它处理,如果是,则自行调用handleMessage处理。

  • Handler如何快速获取一个Message对象?
    使用Handler.obtainMessage(),好处就是省去了new方法。也可以直接使用Message.obtain(this),效果是一样的。

  • removeCallbacks与removeMessages的主要区别
    首先两个方法传参不一样,一个是Runnable对象,一个是int 对应message.what
    可以看做是post和send的逆向操作。

  • 如何移除MessageQueue中的所有没有被处理的消息?
    调用removeCallbacksAndMessages,参数传入null

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. 类和 Json对象
  3. Python list sort方法的具体使用
  4. python list.sort()根据多个关键字排序的方法实现
  5. android的消息处理机制(图+源码分析)——Looper,Handler,Message
  6. Android内核开发:理解和掌握repo工具(含被墙后的下载方法)
  7. Android坐标系分析
  8. Android内存管理
  9. Android(安卓)Handler机制

随机推荐

  1. centos7 安装MariaDB 10.6
  2. jsp 自定义标签实例
  3. AJAX自学练习 无刷新从数据库后台取数据
  4. AJAX 自学练习 请求与显示
  5. scratch怎么绘制十个交叉重叠的圆形?
  6. Ai怎么制作多圆形嵌套效果的图形
  7. 实例演示获取dom元素的两个方法
  8. 淘宝移动端首页商品列表实例
  9. js的访问器属性和获取dom元素两种方法
  10. 详解Mysql主从同步配置实战