第33333333章 HarmonyOS事件处理 本章要点 .HarmonyOS基于监听的事件处理 课程思政 3 .HarmonyOS线程管理 .HarmonyOS线程间通信 本章知识结构图(见图3-1) 图3- 1 本章知识结构图 第3章HarmonyOS 事件处理 图3-1(续) 本章示例(见图3-2) 图3- 2 本章示例图 通过前面两章学习了HarmonyOS 所提供的一些功能强大的界面控件,这些控件主 要用来进行界面的设计与数据的显示,只能实现静态UI,但是如果用户想与之进行动态 交互,获取用户的意图信息,实现更加具体的功能,则还需要相应事件处理的辅助。当用 户在程序界面上执行各种操作时,如单击一个按钮,此时一个体验良好的应用程序通常会 做出相应的响应,这种响应就是通过事件处理来完成的。在前面章节的学习中,已经使用 到了HarmonyOS 中的一些事件处理,例如单击按钮实现数字加一。 在HarmonyOS 中,主线程又可以叫作UI 线程,用户界面属于主线程,默认情况下, 所有的操作都在主线程上执行。如果需要执行比较耗时的任务,可创建其他线程(或子线 程)来处理,否则主线程会因为耗时操作被阻塞,从而出现异常,所以需要不同的任务分发 器来应对不同的操作情况。此外,还需要思考如何才能动态地显示用户界面。本章将介 绍通过EventHandler消息传递来动态更新界面。 如果在事件处理中需要做一些比较耗时的操作,直接放在主线程中将会阻塞程序的 85 鸿蒙应用开发教程 运行,给用户不好的体验,甚至程序会没有响应或强制退出。本章将学习通过同步派发任 务以外的方式来处理耗时的操作。 学完本章之后,再结合前面所学知识,读者将可以开发出界面友好、人机交互良好的 HarmonyOS 应用。 3.amonyOS 基于监听的事件处理 1 Hr 不管是什么手机应用,都离不开与用户的交互,只有通过用户的操作,才能知道用户 的需求,从而实现具体的业务功能,因此,应用中经常需要处理的就是用户的操作,也就是 需要为用户的操作提供响应,这种为用户操作提供响应的机制就是事件处理。 HarmonyOS 的基于监听的事件处理模型,与Java的AWT 、Swing的处理方式几乎 完全一样,只是相应的事件监听器和事件处理方法名有所不同。在基于监听的事件处理 模型中,主要涉及以下3类对象。 .Eventsource(事件源): 即事件发生的源头,通常为某一控件,如图片、列表等。 .Event(事件):用户具体某一操作的详细描述。事件封装了该操作的相关信息, 如果程序需要获得事件源上所发生事件的相关信息,一般通过Event对象来取 得,例如按键事件按下的是哪个键、触摸事件发生的位置等。 .Eventlistener(事件监听器):负责监听用户在事件源上的操作,并对用户的各种 操作做出相应的响应。事件监听器中可包含多个事件处理器,一个事件处理器实 际上就是一个事件处理方法。 在基于监听的事件处理中,这3类对象又是如何协作的呢? 实际上,基于监听的事件 处理是一种委托式事件处理。事件源即普通控件将整个事件处理委托给特定的对象——— 事件监听器:当该事件源发生指定的事情时,系统自动生成事件对象,并通知所委托的事 件监听器,由事件监听器相应的事件处理器处理这个事件。基于监听的事件处理模型如 图3-3所示。 图3- 3 基于监听的事件处理模型 当用户在HarmonyOS 控件上进行操作时,系统会自动生成事件对象,并将这个事件对 象以参数的形式传给注册到事件源上的事件监听器,事件监听器调用相应的事件处理来处 理。该过程类似于生活中我们每个人的能力都有限,当碰到一些自己处理不了的事情时,就 86 第3章 HarmonyOS事件处理 87 委托给某个机构处理。我们需要把所遇到的事情和要求描述清楚,这样,其他人才能比较好 地解决问题,然后该机构会选派具体的员工来处理这件事。其中,我们自己就是事件源,遇 到的事情就是事件,该机构就是事件监听器,具体解决事情的员工就是事件处理器。 单击事件的写法分别为定义实现类、使用当前类作为实现类、使用匿名内部类、使用 方法引用四种,接下来通过按钮的单击事件来展示监听事件的处理。 1.定义实现类 新建一个项目,在layout文件夹下打开ability_main.xml,定义一个按钮,详细代码 如程序清单3-1所示。 程序清单3-1:hmos\ch03\01\Listener1\entry\src\main\java\resource\base\layout\ability_main.xml 1 2 8