事件处理方式 && 消息传递机制
来源:互联网 发布:魏晋风骨 知乎 编辑:程序博客网 时间:2024/06/05 02:17
所有的android事件,都是通过底层驱动将事件整理成Message放入到相应的MessageQueue,再通过Looper来分发,最终到达控件或者Activity的监听器或者事件处理函数。
基于监听的事件处理
为组件绑定特定的事件监听器。View.setOnClickListener(OnClickListener);
Event Source\ Event\ Event Listener
1)内部类做监听器类
2)外部类做监听器类
3)Activity做事件监听器
4)匿名内部类做事件监听器
5)直接绑定到标签 android:onClick
基于回调的事件处理
重写组件特定的回调方法,或者重写Activity的回调方法。
基于回调的事件处理模型,事件源和事件监听器是统一的,事件源本身负责处理事件。
基于回调的事件处理机制可通过自定义View实现,自定义View时重写该View的事件处理方法即可。
事件处理方法返回true,表示该处理方法已经完全处理该事件,事件不会继续传播;
返回false,表示该处理方法并未完全处理该事件,事件会继续传播出去。
事件传递顺序:
先到监听器,然后是组件的事件回调(这里有ViewGroup的onInterceptTouchEvent等复杂的传递),然后是Activity的事件回调。
基于监听的事件处理模型更有优势:1)事件源和监听器分开,更明确的分工;2)优先出发监听器。
响应系统设置的事件:
Configuration类描述手机设备的配置信息,通过Activity.getResources().getConfiguration();获取。
通过访问其属性可以得到各种配置。
Activity.onConfiurationChanged(),监听系统配置变化的事件。
Handler \MessageQueue \Looper \Message
Handler的作用:1.发送消息;2.处理消息。
Handler发送消息是发送到指定的MessageQueue;Looper读取MessageQueue的消息,然后交给发送该消息的Handler处理。
每个线程只能有一个Looper以及配套的一个MessageQueue,在Looper的构造过程中会初始化MessageQueue。
UI线程种已经初始化了一个 Looper 和MessageQueue,因此我们可以直接写Handler处理消息即可。
用户新建的线程则需要初始化Looper,并启动它。
1)Looper.prepare();
2) 创建Handler,并重写handleMessage。
3) Looper.loop();
发送消息调用Handler.sendMessage(Message);等相关函数。
MessageQueue中有一个Message mMessage;的成员,应该是队列的头,
每个Message中有一个Message next;的成员,指向下一个消息。
Handler发送消息的详细过程?
Handler.sendMessage(Message msg);
Handler.sendMessageDelayed(Message msg, long delayMillis);
Handler.sendMessageAtTime(Message msg, long uptimeMillis);
private Handler.enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis);
在其中把当前Handler的this赋给msg的target.然后将消息插入队列,
private MessageQueue.enqueueMessage(Message msg, long when);
Looper分发Message的方式?
Message有个Handler target的私有成员。
Looper在loop()中,不断从MessageQueue取消息出来(调用MessageQueue.next()),
然后调用Message中Handler target的dispatchMessage()分发消息。
而Handler. dispatchMessage()判断有没有回调函数CallBack,若无则直接调用Handler的handleMessage().
其中handleMessage()是接口类CallBack的一个接口,用户必须实现。
异步任务
AsyncTask<Params,Progress,Result>将耗时操作丢给后台线程去操作。
1)创建AsyncTask子类,并指定其参数类型。2) 重写必要的方法,doInBackGround\onProgressUpdate\onPreExecute\onPostExecute
3) 调用AsyncTask子类实例的execute()方法。
0 0
- 事件处理方式 && 消息传递机制
- 事件处理机制之Handler消息传递机制浅析
- Android事件处理之四 Handler消息传递机制
- Handler消息传递处理机制
- Android - 事件模型-事件传递,处理机制
- Android 事件处理模型(三)消息传递机制: Handler Looper MessageQueue
- 委托方式事件处理机制
- android消息传递与处理机制总结
- Android UI事件传递与处理机制
- Android touch事件处理传递机制
- Android 的事件分发、传递、处理机制
- Windows 消息处理机制与事件驱动
- Windows 消息处理机制与事件驱动
- ActiveMQ消息处理机制-Queue方式
- ActiveMQ消息处理机制-Topic方式
- ActiveMQ消息处理机制-Queue方式
- Touch事件处理 以及 Touch事件传递机制
- Android笔记二十五.Android事件Handler消息传递机制
- 在Delphi与C++之间实现函数与对象共享
- [IOS之应用程序发布到苹果APP STORE完整流程]
- 也谈武媚娘
- 你在按谁的时间表过人生?
- HBase的eclipse操作环境配置
- 事件处理方式 && 消息传递机制
- 自己动手写编译器、链接器-第十一章
- tomcat开启jmx
- 成燕
- 在有重复数据的表上添加唯一索引的方法
- 51单片机内部资源
- C++声明和定义
- 学习Swift写iOS?那写安卓和WinPhone呢?请看一石三鸟终极解决方案 - Silver!
- 【interface】C#interface定义及使用浅析