和其他面试点一样,我将 通过自己学习源码,来总结可能出现的问题点。再次鼓励的大家通过源码学习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. webapp打包为Android的apk包的一种方法
  2. Android智能指针使用方法介绍
  3. [Android] ListView (普通列表控件) 的基本使用方法
  4. 杂谈Android线程优先级
  5. JS调用Android里面的方法,Android调用JS里面的方法

随机推荐

  1. Java知识体系、面试、算法、微服务的学习
  2. 十道算法题[二]
  3. Java8如何让自己的代码不那么啰嗦?!
  4. 《Head First Servlets and JSP 2nd Edit
  5. 插入排序(Insertion Sort)
  6. 开发运营博客、公众号、小程序的 3 点感
  7. 同样的复杂度,为什么插入排序比冒泡排序更
  8. 从代码的改进,看参数行为化与Lambda
  9. 总是半吊子,何以卓越?
  10. 希尔排序(Shell Sort)