一、概述
不管是桌面应用还是手机应用,面对的都是用户,经常需要处理用户的操作,为用户的动作提供响应,这种机制就是事件处理
Androd系统提供了两种事件处理机制
a、基于监听的事件处理
b、基于回调的事件处理
二、基于监听的事件处理
a、涉及三个模型
Event Source(事件源,事件发生的场所,通俗地讲就是各个组件,如按钮,菜单)(比如企业发生了火灾)
Event(事件),封装了界面上特定的事情(报警,企业处理不了,要消防局来处理)
EventListener(事件监听器)对事件做出的响应(消防机关的警察来灭火)
例子:模拟飞机的移动
public class PlaneView extends View{ public float cx; public float cy; Bitmap palne; public PlaneView(Context context){ super(context); plane=BitmapFactory.decodeResource(context.getResources(),R.drawable.iclon); setFocusable(true); } //还有两个参数,三个参数的构造方法,在使用xml自定义的控件时,会默认调用第二个构造函数 //在这里省略掉了 public void onDraw(Canvas canvas){ super.onDraw(canvas); Paint p=new Paint(); canvas.drawBitmap(plane,cx,cy,p); }
主Activity
public class PlaneGame extends Activity{ private int speed=10;//飞机的移动速度 public void onCreate(Bundle savedInstanceState){ super.onCreate(); //去标题 //全屏显示 final PlaneView planeView=new PlaneView(this); //根据屏幕的宽高设定飞机的初始位置 planeView.cx=....; planeView.cy=....; planeView.setOnKeyListener( new onKeyListener(){ public boolean onKey(View source,int keyCode,KeyEvent event){ // //根据event.getKeyCode()来分别控制上下左右 (调整成员变量cx,cy达到改变飞机的位置) return true;//planeView已经把把键盘触摸的事件消费了,下面的Activity一边待着去吧 } } } ); } }
三、基于回调的事件处理
定义:相比于监听,回调的事件源和事件监听器统一了,也就是所组件自己就具备处理事件的能力
public class PlaneView extends View{ public float cx; public float cy; Bitmap palne; public PlaneView(Context context){ super(context); plane=BitmapFactory.decodeResource(context.getResources(),R.drawable.iclon); setFocusable(true); } //还有两个参数,三个参数的构造方法,在使用xml自定义的控件时,会默认调用第二个构造函数 //在这里省略掉了 public void onDraw(Canvas canvas){ super.onDraw(canvas); Paint p=new Paint(); canvas.drawBitmap(plane,cx,cy,p); } //增加的代码,重写按键点击的响应 public boolean onKeyDown(int keyCode,KeyEvent event){ super.onKeyDown()keyCode,event; syso("the onkeydown on planeView"); reutrn false;// } }
上面在planeview本身就完成了onkeydown的响应
事件响应顺序:当组件上的事件被触发后,Android系统最先触发的是按键上绑定的事件监听器,接着才触发该组件提供事件的回调方法,然后传播给该组件的Activity,如果任何一个组件处理返回了true,事件就不会继续向外传播了。
比较者:基于回调的事件处理具备有更加好的内聚性,模块化更加强一点,把属于一个组件的事务封装到一起
在handler里也有回调,因此我们把handler补充进来,形成知识连
四、handler消息传递机制
背景:由于手机的性能是有限的,为了Android性能的优化,(效率高一点),Android的UI操作不是线程安全的(线程安全就是同一个时刻只有一个线程操作数据),这就意味着当多个线程共同操作ui控件的时候可能会线程不安全,于是Android规定:只有UI主线程有权利操作UI组件。
为了实现这样的效果:由于新开辟的线程希望修改属性的值,却没有资格,这个尴尬的局面。Android提供了handler来完成对把控件的值修改的任务(回调的方式处理这个事件)
具体的过程就是:开发者只需要重写handler类的消息处理方法,当新启动线程的消息通过handler会加入的消息队列里,handler源源不断地获取这个消息队列里的消息并且一一处理,于是handler就回调了
介绍了handler 和消息队列,还差一个Looper,它就是消息队列的管理者
handler想源源不断地获取队列的message,就需要当前线程(一般是UI线程)有一个Looper对象
奇怪啊,我们主线程编写是好像没看到过Looper,为什么handler还能正常地运行呢?(因为UI线程已经初始化了Looper对象)。
如果当前线程不是UI线程,而是自己搞的一个子线程,开发者需要创建Looper对象,并且调用prepare()方法,这样handler就能正常地工作了(因为Looper已经管理了消息队列)
对Looper源代码的研究
private Looper(){ mQueue=new MessageQueue(); mRun=tru; mThread=Thread,.currentThread(); } //说明Looper不能通过构造函数实例化,Looper在初始化时会指明哪个消息队列,哪个线程
public static final void prepare(){ if(sThreadlocal.get()!=null){ throw new Exception(一个线程里只能创建一个Looper); } sThreadlocal.set(new looper()); }
threadlocal线程范围内数据共享,类似map集合,键值对,
例子:明天补充
今天复习了两种事件,自定义控件,多线程,handler,挺不错啊,加油
相关推荐
Android事件处理机制
Android事件处理机制是Android应用程序开发中的关键组成部分,它使得用户与应用之间能够进行有效的交互。在Android系统中,事件处理主要包括触摸事件、键盘事件、广播事件等,这些事件的处理方式直接影响到应用的...
在Android应用开发中,事件处理机制是至关重要的组成部分,它涉及到用户与应用程序的交互,包括点击、滑动等各类操作。本示例"Android 事件处理机制 demo"将深入探讨这一主题,通过实际代码演示如何有效地管理和响应...
Android事件处理机制主要涉及三类对象:事件(Event)、事件源(Event Source)和事件监听器(EventListener)。在本主题中,我们将深入探讨`ViewGroup`的事件传递,即事件分发过程。 1. **事件模型** Android事件...
在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。
本篇将详细解析Android事件处理机制,特别是基于给定的"android 事件处理demo",我们将深入探讨如何在实际应用中处理触摸事件。 首先,Android事件处理主要分为两个阶段:事件分发(Dispatching)和事件处理...
通过这个demo,开发者可以直观地了解Android事件处理机制,并进行实际操作以验证其工作原理。这对于优化用户界面交互和调试事件处理问题具有重要的实践意义。在实际开发中,灵活运用事件派发机制可以创建更高效、...
本教程将深入探讨Android事件处理机制,包括点击事件、触摸事件以及各种监听器的使用。以下是关于这个主题的详细内容: 1. **事件源**:在Android中,事件通常由UI组件(如按钮、文本框等)触发。这些组件被称为...
在Android系统中,事件分发机制是用户与应用程序交互的核心环节。它决定了用户在屏幕上点击、滑动等操作如何被正确地处理和响应。本文将深入探讨Android事件分发机制,帮助开发者理解这一关键概念。 首先,我们从...
在Android开发中,事件传递和处理机制是相当关键的一个部分,尤其对于用户界面的交互有着决定性的影响。本文主要探讨了Android系统如何处理触摸事件,通过拟人化的比喻来解释事件传递的流程,并通过实际代码示例进行...
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。事件主要指的是用户的触摸操作,例如点击、滑动等。当用户在屏幕上进行操作时,这些事件会经过一系列的处理和分发,最终到达相应的View进行...
在Android开发中,事件分发机制是理解和优化用户交互界面不可或缺的部分。本文将深入探讨“Android事件分发机制总结Demo”,结合代码实例MyTouchEventDemo,帮助开发者清晰理解这一核心概念。 事件分发机制主要涉及...
### Android事件分发机制详解 #### 一、触摸事件涉及的核心类 在Android系统中,触摸事件主要由两类核心对象负责处理:`ViewGroup` 和 `View`。 1. **ViewGroup**:作为容器,继承自 `View`,用于容纳多个 `View`...
在Android开发中,事件分发机制是至关重要的一个部分,它决定了用户与界面交互时,事件如何在不同的组件之间传递和处理。本文将基于“Android事件分发机制全解析Demo”进行深入探讨,并通过实际的代码示例来帮助你更...
在Android系统中,事件处理是应用交互的核心部分,它涵盖了用户与设备间的各种交互,如..."TL24_KeyEvent_test"可能就是一个实际案例,用于测试和学习如何处理键盘事件,这有助于开发者更好地掌握Android事件处理机制。
本文将深入探讨“android之Touch事件处理机制测试”,包括滑动事件冲突的解决、ViewGroup中的事件触发和传递机制。 一、Android Touch事件处理机制 1. 触摸事件流程:在Android中,触摸事件分为三个阶段,即ACTION...
通过对这些日志截图的分析,我们可以更直观地了解Android事件分发机制的工作原理,这对于优化用户体验和处理复杂的交互场景至关重要。在实际开发中,理解和掌握这一机制能帮助我们更好地控制UI的响应行为,提升应用...