【Android面试知识点系列】Handler相关
和其他面试点一样,我将 通过自己学习源码,来总结可能出现的问题点。再次鼓励的大家通过源码学习Android或者其他语言的知识,源码之下,毫无隐瞒。
Handler作为Android中重要的一个类,在面试中经常被问到,也是Android跨线程通讯的好手段。
谈一谈Handler在Android中的主要用途
- 安排Message或者Runnable对象在本线程中指定时间点执行
- 让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
更多相关文章
- webapp打包为Android的apk包的一种方法
- Android智能指针使用方法介绍
- [Android] ListView (普通列表控件) 的基本使用方法
- 杂谈Android线程优先级
- JS调用Android里面的方法,Android调用JS里面的方法