返回顶部
首页 > 资讯 > 移动开发 >Android中的事件处理总结
  • 182
分享到

Android中的事件处理总结

事件Android 2022-06-06 13:06:56 182人浏览 薄情痞子
摘要

                                                                                       A

                                                                                       Android中的事件处理总结

Android系统对动作做出的响应机制就是事件处理。Android提供了两种事件处理机制。

基于监听的事件处理机制 基于回调的事件处理机制

一、基于监听的事件处理机制

Android的事件监听机制就是一种”面向对象”的事件处理,是一种”委派模式(Delegate)”事件处理方式。Android的UI组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理事件。例如:消防所(事件监听器)监听所有的火灾事件并处理火灾,所有的企事业单位(事件源)当发生火灾时本身自己无法灭火,都委托给消防所来灭火。

所以基于监听的事件的处理模型中,主要涉及三类对象:

Event Source(事件源):事件发生的Android组件。例如:按钮、菜单等 Event(事件): UI上面的事件源发生的特定的事件,一般都是通过Event对象获取。例如:长按、点击等 Event Listener(事件监听器):负责监听事件源所发生的的事件,对各种事件做出相应的反应。例如:处理登录业务的响应。

 

 

事件监听模式分为以下几种使用场景:

内部类形式:将事件监听器类定义成当前类的内部类 外部类形式:将事件监听器类定义成一个外部类 Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法 匿名内部类形式:使用匿名内部类创建监听器对象 直接绑定标签:直接在界面布局文件中指定标签绑定事件处理函数

 

方法一:内部类形式

将监听器类定义成当前类的内部类

 

方法二:外部类

将事件监听器类定义为一个外部类,通过外部类对事件源进行监听,并在外部类实现事件。

 

方法三: Activity本身作为事件监听器类

1.监听器设置为this,代表自身类、

2.自身类实现事件监听接口View.OnClickListener、

3.自身类重写接口onClick方法

 

 

方法四:匿名内部类

使用匿名内部类创建监听器对象

方法五:直接绑定标签

通过UI布局文件,设定UI控件的android:onClick的属性(事件处理方法),在相应的Activity代码文件中里面设置跟android:onClick设置的同名方法,且该方法必须是public void的,同时有一个View类型的参数

 

基于监听的事件处理机制总结:

 1).通过设置UI组件的android:onClick属性,然后代码实现方法:此方法业务逻辑和UI耦合性太高,实际业务一般不用

2).匿名类:一般只应用特定组件的特定业务响应

3).内部类:当前类可以重复使用该监听器类;当前类的所有界面组件都可以使用该内部类作为监听器。

4).外部类:可作为多个UI共同的事件处理,适用多个UI组件复用;但事件源要传递信息给事件监听器时则不太灵活,必须通过成员变量及构造方法

5).Activity自身类:处理比较灵活,实际中用的最多

6).当同一个UI对同一个事件注册多个监听器时,根据注册的顺序,最后注册的事件监听器优先触发,事件不再传递,最后触发的是通过UI设定的方法

 

 

二、基于回调的事件处理机制

监听机制是一种委托(Delegate)的事件处理方式;而回调机制则是事件源和事件监听是统一的(自己的事情自己干)。

方法回调是将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以 达到接口统一,实现不同,系统通过在不同的状态下"回调"我们的实现类,从而达到接口和实现的分离!

  Android提供的GUI组件上发生的所有事情,系统都提供了对应的事件处理方法,Java是一种静态语言无法给GUI组件或对象提供动态的添加方法,只能继承GUI,通过重写该类的处理方法来实现回调事件处理。 Android为GUI组件提供大量响应事件的方法,可以用于回调的使用。

常见View组件的回调方法:

android为GUI组件提供了一些事件处理的回调方法,以View为例,有以下几个方法

在该组件上触发屏幕事件: boolean onTouchEvent(MotionEvent event);
在该组件上按下某个按钮时: boolean onKeyDown(int keyCode,KeyEvent event);
松开组件上的某个按钮时: boolean onKeyUp(int keyCode,KeyEvent event);
长按组件某个按钮时: boolean onKeyLongPress(int keyCode,KeyEvent event);
键盘快捷键事件发生: boolean onKeyShortcut(int keyCode,KeyEvent event);
在组件上触发轨迹球屏事件: boolean onTrackballEvent(MotionEvent event);
*
当组件的焦点发生改变,和前面的6个不同,这个方法只能够在View中重写哦! protected void onFocusChanged(boolean gainFocus, int direction, Rect previously FocusedRect)

 

在Android中基于回调的事件处理机制使用场景有两个:

1)自定义view

当用户在GUI组件上激发某个事件时,组件有自己特定的方法会负责处理该事件 通常用法:继承基本的GUI组件,重写该组件的事件处理方法,即自定义view 注意:在xml布局中使用自定义的view时,需要使用"全限定类名"

   

 

因为我们直接重写了Button的三个回调方法,当发生点击事件后就不需要我们在Java文件中进行事件监听器的绑定就可以完成回调,即组件会处理对应的事件,即事件由事件源(组件)自身处理!

 

2)基于回调的事件传播:

几乎所有的基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否能完全处理该事件:

1.如果返回true,则表明该处理方法已完全处理了该事件,该事件不会被传播出去。

2.如果返回false,表明该处理方法未完全处理该事件,该事件会传播出去。

对于基于回调的事件处理传播而言,某组件上所发生的事情不仅激发该组件上的回调方法,也会触发该组件所在的Activity的回调方法——只要事件能传播到该Activity。

即是否向外传播取决于方法的返回值是时true还是false;

传播的顺序是: 监听器--->view组件的回调方法--->Activity的回调方法

 

参照Android开发者文档可知OnLonGClickListener() ,OnFocusChangeListener(),OnKeyListener()等监听器的使用场景。而onMenuItemClickListener则监听当菜单项被点击后触发的onMenuItemClick事件,

参考资料

[1].Flame_Dream.Android开发系列10——事件处理机制.OL.

https://blog.csdn.net/Future_One/article/details/104779618

 

[2].李yi辉.Android中的事件处理总结-基于监听的事件处理.OL.

 Https://blog.csdn.net/yihuiworld/article/details/46308569

[3]. 输入事件概览  |  Android 开发者  |  Android Developers

https://developer.android.com/guide/topics/ui/ui-events?hl=zh-cn#EventHandlers

[4]. 3.2 基于回调的事件处理机制

https://www.runoob.com/w3cnote/android-tutorial-callback-event-handle.html


作者:逝不等琴生


--结束END--

本文标题: Android中的事件处理总结

本文链接: https://lsjlt.com/news/29248.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中的事件处理总结
                                                                                           A...
    99+
    2022-06-06
    事件 Android
  • Android ButtonOnClick事件的写法总结
    Android ButtonOnClick事件的写法总结假设layout里有三个Button吧,id分别是 button_1 ,button_2 , button_3之前一直都知道有两种onClick写法:button_1.setOnCli...
    99+
    2023-05-30
    android buttononclick roi
  • Python 文件处理注意事项总结
    Python 文件处理注意事项总结 文件处理在编程中是常见的操作,文件的打开,关闭,重命名,删除,追加,复制,随机读写非常容易理解和使用。需要注意的是文件的安全关闭,采用with语句轻松便捷: wi...
    99+
    2022-06-04
    注意事项 文件 Python
  • Android AccessibilityService 事件分发原理分析总结
    目录AccessibilityService 监听事件的调用逻辑onAccessibilityEventonInterceptAccessibilityService 事件的外部来源...
    99+
    2024-04-02
  • Android编程中延后处理事件的方法小结
    本文实例讲述了Android编程中延后处理事件的方法。分享给大家供大家参考,具体如下: 一、Handler和TimerTask相结合 1、首先定义TimerTask Time...
    99+
    2022-06-06
    小结 方法 事件 Android
  • JavaScript中事件循环总结
    这篇文章主要讲解了“JavaScript中事件循环总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中事件循环总结”吧!js中的事件循环因为JavaScript是单线程的...
    99+
    2023-06-20
  • android onTouchEvent处理机制总结(必看)
    项目中总会用到一些触摸事件,每次使用都是百度各种资料,看各种大神的分析笔记。这次我自己总结下关于触摸事件的一些知识点。一来可以让自己对触摸事件印象更加深刻,也给以后的项目做一个...
    99+
    2022-06-06
    Android
  • Android应用事件处理
    一. 实验目的 1.掌握内部类作为事件监听器的事件处理 2.掌握外部类作为事件监听器的事件处理 3.掌握基于回调的事件处理 二. 实验内容 1....
    99+
    2022-06-06
    事件 Android
  • 全面总结Android中线程的异步处理方式
    一、概述 Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。那么什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一...
    99+
    2022-06-06
    异步 线程 Android
  • Android中View事件防抖的处理方案
    这篇文章主要介绍了Android中View事件防抖的处理方案,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。两种方案侵入式防抖处理(NoShakeClickListener) ...
    99+
    2023-06-14
  • Android 黑屏问题分析处理总结
    介绍 黑屏问题是显示相关的综合性问题,涉及Android应用层、框架层和底层SurfaceFlinger、屏显等多个领域。下面有一些基础的判断来定位黑屏问题的归属: (1) 屏幕没有亮屏、背光为0则需先从power、屏显角度分析 (2) 屏...
    99+
    2023-08-16
    android
  • Android事件分发机制(下) View的事件处理
    综述   在上篇文章Android中的事件分发机制(上)——ViewGroup的事件分发中,对ViewGroup的事件分发进行了详细的分析。在文章的最后ViewGroup的di...
    99+
    2022-06-06
    view Android
  • JavaScript中DOM操作常用事件总结
    目录常用事件演示得到焦点和失去焦点演示 鼠标划过和离开点击事件load加载页面事件onkeyup 键盘弹起事件内容变化事件选中时触发上一篇聊了如何同JavaScript获得页面元素,...
    99+
    2024-04-02
  • Android按钮单击事件的四种常用写法总结
    很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对...
    99+
    2022-06-06
    事件 Android
  • Android实现按钮点击事件的三种方法总结
    目录一、匿名内部类实现二、接口实现三、布局实现Button是程序用于和用户进行交互的一个重要控件,相信大家对这个控件已经非常熟悉了,我们平时用的最多的控件之一。既然有Button,那...
    99+
    2024-04-02
  • Node.js中的events事件模块知识点总结
    通过对Node的学习及应用,我们知道NodeJS其采用单线程、事件驱动、非阻塞I/O等架构设计,非常适用于高并发、I/O密集型应用。 1. 什么是事件驱动? 事件驱动,简单来说就是...
    99+
    2024-04-02
  • JAVA中的事务,事务模块总结
    什么是事务? 简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性:"执行成功后提交",意味着持久性;"执行失败后...
    99+
    2016-07-09
    JAVA中的事务,事务模块总结
  • Android中应用多进程的整理总结
    前言 在计算机操作系统中,进程是进行资源分配和调度的基本单位。这对于基于Linux内核的Android系统也不例外。在Android的设计中,一个应用默认有一个(主)进程。但是...
    99+
    2022-06-06
    进程 多进程 Android
  • Android开发基础 事件处理
    Android事件处理 1-基于监听的事件处理 基于监听的事件处理,其实就是为UI组件绑定事件监听器。 在事件监听处理模型中,主要涉及以下三个对...
    99+
    2022-06-06
    事件 android开发 Android
  • Android 中 EventBus 的使用之多线程事件处理
    在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效。 AsyncTask, Loader和Executor…… 拜托! And...
    99+
    2022-06-06
    事件 eventbus 多线程 线程 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作