Android第三章
>事件处理的概述
- 两种事件处理机制
- 基于监听的事件处理
- 基于回调的事件处理
>基于监听的事件处理机制
-
涉及到的三类对象
- Event Source事件源,指各个组件。
- Event 界面组件上发生的特定的事情,。
- Event Listener监听事件源发生的事情。并对各种事情作出相应的响应。
- Event Handler事件处理器,当事件监听器捕获事件后,由响应的事件处理器识别特定的事件,并做出响应的动作。
-
事件监听机制的工作流程
普通组件(事件源对象) 发生很多事件,生成多种事件对象 被同一个监听器对象捕获 监听器通过不同的事件处理器处理这个事件。每个组件可以根据不同的事件类别指定多个监听器,每一个监听器可以监听多个事件源。
>实现事件监听器的方法
- 内部类作为时间的监听器
使用内部类作为事件监听器能够在这个类内复用该监听器。该监听器类能够自由访问外部类的所有界面组件 - 外部类作为时间监听器
事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性。外部类形式的时间监听器不能够自由访问GUI界面的类中的组件。同时也适用于监听器于GUI界面没有任何耦合情况。监听器还是主要来写显示逻辑,具体的业务逻辑放到外部的其他函数或者类中进行处理。
- Activity类本身作为事件监听器
不推荐,activity类本身用来界面初始化工作,包含事件监听器容易造成程序的逻辑结构混乱。 - 匿名类作为时间监听器类
大部分时候事件监听器类的代码没有什么复用价值,所以只要使用匿名类来实现事件监听器想要达到的页面逻辑就好。
android可以直接在界面布局中制定标签绑定事件的处理方式。
android:onClick=“clickHandler”
>基于回调的事件处理方法
- 回调机制
事件的处理直接绑定到与组件相关的时间处理函数上,而非通过监听器的监听和事件处理器的匹配处理。有点像事件监听器和事件源融合在一起,不需要单独的时间监听器类,事件源本身能够监听自身发生的各种事件。 - 基于回调的事件传播
当返回为true时,表明该方法已经能够处理发生的事件,事件不会向外传播给外层的时间监听器。当返回为false时,如果有外围的监听器处理同一个事件,则事件会向外传播,同时被其他监听器坚挺到。如果存在各种监听器,其监听顺序为:绑定的事件监听器–>基于回调的内部事件监听器–>基于回调的外部事件监听器。
>相应系统设置的事件
- 用来获取系统的配置
- onConfigurationChanged能够监听相关的配置改变的事件。
>Handler消息传递机制
-
工作原理
android第一次启动,主线程负责activityUI界面的线程,而且只允许UI线程对主界面进行修改,其他新启动的线程无法对主界面进行直接修改,需要使用Handler进行消息传递。 -
Handler简介
- 在新启动的线程中发送消息
- 在主线程中获取和处理消息
好像是原来的事件处理机制变成了消息处理机制,通过监听消息,处理消息完成一系列动作,同事件处理一样。
-
Handler涉及的方法
- HandlerMessage()
- hasMessage()
- hasMessages()
- obtainMessage()
- sendEmptyMessage()
- sendEmptyMessageDelayed()
- sendMessage()
- sendMessageDelayed()
-
Handler、Loop、MessageQueue的工作原理
- Message是Handler接受和处理的对象
- Looper每个线程只能有一个Looper,loop方法负责读取MessageQueue中的消息
- MessageQueen消息队列,采用了先进先出的方式管理队列。
private Looper()
{
mQueue = new MessageQueue();
mRun = true;
mThread = Thread.currentThread();
}
- Looper类的使用方法
- 调用Looper的prepare方法,创建Looper对象,生成对应的MessageQueue来管理事件
- 创建Handler子类,用于发送本线程的消息。重写HandlerMessage方法,负责处理来自其他线程的消息。
- 调用Looper的loop方法启动Looper类
UI线程一般专门用来相应用户的界面操作,而其他的逻辑运算和处理都交给其他线程处理主要目的是防止UI线程被阻塞而让用户以为界面卡顿。
此时如果UI线程与其他线程的交互方式,就是Handler消息传递机制,同事件监听机制的逻辑十分相似。
>异步任务
-
解决新线程不能更新UI主界面的问题的方法文章来源:https://www.toymoban.com/news/detail-500916.html
- 使用Handler消息处理机制
- Activity.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable,long)
- 异步处理机制
-
AsyncTask<Params,Progress,Result>异步类文章来源地址https://www.toymoban.com/news/detail-500916.html
- 创建AsyncTask的子类,并制定三个参数的类型。
- 根据需要实现下列方法
- dolnBackground()后台线程即将执行的任务,通过调用publishProgress()更新任务的执行进度
- onProgressUpdate()调用更新任务进度的方法后,会触发这个方法
- onPreExecute()方法,执行后台操作前被调用,完成初始化工作
- onPostExcute()后台任务执行完成后,调用这个方法
- 调用AsyncTask子类的execute方法开始执行好事任务。
到了这里,关于【Android学习笔记】事件监听机制详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!