最近想做个android的知识总结,把近2-3年来的android开发知识写写,分享给大家,也好让自己更深刻的理解android开发


android中的handler是一个很总要的知识,可以说android开发基本上避免不了handler的

handler的作用基本上可以概括为Android提供了一个异步的消息回调机制Handler,  它负责发送消息和处理线程消息队列中的消息及runnable对象 ,这样说比较抽象,让我们来形象的描述下handler在android的界面开发中的使用

在创建handler的时候必须要指定这个handler是处理那个Looper对象的消息,如果不指定android默认为当前创建对象的looper消息

现在我们来看看handler的一些常见问题

1.为什么要使用handler?(  Answer:     1)按计划发送消息或执行某个Runnanble(使用POST方法),类似定时器;
                                                        2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程);)

2.handler是异步的,创建一个handler实例是创建一个新的线程吗??(NO,没有创建新的线程,但是为什么没有阻塞主线程?这是有系统管理Looper的

3.在同一线程中,handler1发送消息,handler1能收到消息,handler2能收到吗?(只能在handler1中收到)

4.在子线程中,运用主线程中定义的handler,sendMessage,主线程中得handler能收到吗?(能)

5.在子线程中创建一个handler实例,并发送消息,这样可以吗???(出现异常)

6.HandlerThread是什么,什么时候使用??(需要Looper,自己不想创建,因为HandlerThread默认有Looper,有消息队列)

7.Message,Looper,Handler,MessageQueue等地关系如何???

8.sendMessage和post的区别是什么??是否共用一个消息队列messageQueue??(他们是使用同一个HandlerThread;sendMessage和post的区别就是在looper中loop()函数中得dispatchMessage()时有区别调用Handler类中以post开头的方法可以将一个runnable对象包装在一个Message对象中, 然后再压入消息队列, 此时入队的Message其callback字段不为null,值就是这个runnable对象. 调用Handler对象的这些方法入队的Message, 其target属性会被赋值为这个handler对象.Message的参数中也有这个参数的设置。)

handler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(value);
}
});

9.handler是在主线程内吗?(不一定,一般是的,但是如果在handler的构造函数中传入子线程的Looper,则就会在该线程中)

10.子线程中构造的的handler可以传入主线程的Looper,就是操控主线程的消息队列??(可以)


消息循环的核心是Looper,Looper持有消息队列MessageQueue对象,一个线程可以把Looper设为该线程的局部变量,这就相当于这个线程建立了一个对应的消息队列。Handler的作用就是封装发送消息和处理消息的过程,让其他线程只需要操作Handler就可以发消息给创建Handler的线程。


更多相关文章

  1. Android学习笔记:Android消息处理机制之Handler介绍
  2. Android之消息推送实现
  3. Android Handler机制 - handleMessage究竟在哪个线程执行
  4. 第十章、Android的消息机制
  5. 【Android】进程与线程基本知识
  6. Android应用程序键盘(Keyboard)消息处理机制分析(25)

随机推荐

  1. android中模拟http协议表单上传
  2. Android调用手机系统自带录音功能实现语
  3. Toasts | Android(安卓)Developers
  4. Android(安卓)广播内部机制详解(三)
  5. Android(安卓)中使用MediaRecorder进行录
  6. Android(安卓)Bitmap用法总结
  7. 2019年最新Android常用开源库汇总上篇(持
  8. Android(安卓)camera 设置聚焦区域
  9. android http请求访问接口的封装
  10. android 动画使用