Android中的消息机制Handler、Message、Looper之间关系
来源:互联网 发布:nginx php fpm 配置 编辑:程序博客网 时间:2024/06/14 09:28
概念
1、什么是消息队列(MessageQueue)?
2、什么是消息(Message)?
代表一个行为(what)或者一串动作(Runnable),有两处会用到Message:Handler和Messenger
3、什么是Handler?
4、什么是Looper?
每个线程只有一个Looper,比如UI线程中,系统会默认的初始化一个Looper对象,它负责管理MessageQueue,不断的从MessageQueue中取消息,并将相对应的消息分给Handler处理
5、线程有没有Looper有什么区别?
线程如果没有Looper,就没有消息队列,就无法处理消息,线程内部就无法使用Handler。这就是为什么在子线程内部创建Handler会报错因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,可能导致线程安全问题。为了解决这一个问题,android制定了一条规则:只允许UI线程来修改UI组件的属性等,也就是说必须单线程模型,这样导致如果在UI界面进行一个耗时叫长的数据更新等就会形成程序假死现象 也就是ANR异常,如果20秒中没有完成程序就会强制关闭。所以比如另一个线程要修改UI组件的时候,就需要借助Handler消息机制了。
1、在新启动的线程中发送给消息
2、在主线程获取、处理消息
8、如何让线程有Looper从而正常使用Handler?步骤:
在线程的run方法中加入如下两句:
1、调用Looper的prepare()方法为当前线程创建Looper对象,创建Looper对象时,它的构造器会自动的创建相对应的MessageQueue
2、创建Handler子类的实例,重写HandleMessage()方法,该方法处理除UI线程以外线程的消息
3、调用Looper的loop()方法来启动Looper
消息队列和Looper的工作机制
一个Handler会有一个Looper,一个Looper会有一个消息队列,Looper的作用就是循环的遍历消息队列,如果有新消息,就把新消息交给它的目标处理。每当我们用Handler来发送消息,消息就会被放入消息队列中,然后Looper就会取出消息发送给它的目标target。一般情况,一个消息的target是发送这个消息的Handler,这么一来,Looper就会把消息交给Handler处理,这个时候Handler的dispatchMessage方法就会被调用,一般情况最终会调用Handler的handleMessage来处理消息,用handleMessage来处理消息是我们常用的方式。
下面是消息机制中几个重要成员的关系图:
- Android中的消息机制Handler、Message、Looper之间关系
- Android中的消息机制Handler、Message、Looper之间关系
- Android消息处理机制---Looper、Handler、Message之间的关系
- Android 消息机制 以及Message、Handler、Message Queue、Looper之间的关系。
- Android 异步消息机制(Looper、Handler、MessageQueue、Message关系)
- Android异步消息机制中的Looper , Handler , Message有什么关系
- Android中的Looper , Handler , Message的关系,异步消息处理的机制,根据源码分析
- android消息处理机制(Looper,Handler,Message)
- android消息机制 Message, Looper,Handler
- android消息机制:Looper,Handler,Message
- Android消息处理机制--Looper,Handler,Message
- Android 消息机制,Looper、Handler、Message 解析
- Android消息处理机制Message,Looper,Handler
- Android:消息机制(Message,Handler,Looper
- Android消息处理机制Handler、Looper、Message
- Android 消息机制:handler looper message
- android的消息处理机制(图+源码分析)——Thread,Looper,MessageQueue,Message,Handler之间的关系
- Android中的Handler,Looper,Message机制
- 《Android开发精要》读书笔记——Android应用模型
- UVA 11462(p39)----Age Sort
- iOS中的正则表达式
- MVC View中获取action、controller、area名称
- JAVA生产者消费者的实现
- Android中的消息机制Handler、Message、Looper之间关系
- jitter buffer QoS的解决方案
- iOS开发系列--IOS程序开发概览
- js关闭弹出window
- 【nginx】新手指南
- Java中的同步与死锁
- PL/SQL之触发器谓词
- MySQL基本知识
- Leetcode ☞ 35. Search Insert Position 【binary search 二分查找 模板】