疯狂Android讲义第三章-Android的事件处理

本章主要涉及内容有:

一、Android事件处理机制,其中包括监听和回调两种处理机制

二、Configuration类

三、Handler、Loop及MessageQueue

四、AsyncTask

一、监听机制和回调机制

1.1-监听机制

监听事件处理模型包括三类对象:事件源、事件和事件监听器。其中事件源为事件发生的场所/组件,事件为用户动作,事件监听器则负责监听并处理事件。

以用户点击某Button后,在主界面中显示Toast这一过程为例,其中:

事件源为Button

事件为用户点击该Button

事件监听器(此处为onClickListener)负责监听并处理该事件(显示Toast)

典型的代码实现:

btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(getApplication(), "Btn Clicked", Toast.LENGTH_SHORT)
						.show();
			}
		});

监听器的实现形式主要有四种:内部类形式、外部类形式、Activity本身作为事件监听器类、匿名内部类形式

代码中实现方式为匿名内部类形式,这也是最常用的形式。

1.2-回调机制

回调与监听机制的不同之处主要在于:监听机制中,由事件监听器负责监听及处理发生的事件。而在回调机制中,事件源中已经写好了事件发生时应如何处理,即处理事件这一动作由事件源本身完成,而不是托付给事件监听器。重载回调函数后将该View置于Activity的layout布局文件中即可。

注意,此处回调函数的返回值为boolean型。若返回true,表示事件处理完成后不会向上传递。返回false,则表示会继续将该事件传递给更上一层进行处理。

同样以点击Button为例,若Button中返回false,则在Button的回调函数中处理完该事件后,会继续调用放置Button的Activity中响应回调函数进行处理。

代码实现:

public class MyButton extends Button {

	public MyButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	@Override
	public boolean onTouchEvent(MotionEvent e){
		Toast.makeText(getContext(), "Btn Clicked", Toast.LENGTH_SHORT).show();
		return true;
	}
}

若同时实现了监听和回调机制,则调用顺序为监听->回调。以此处为例,若同时实现了两者,则会先调用监听器中的onClickListener,再回调onTouchEvent。

二、Configuration类:用于获取设备状态的类,Android可调用Activity的如下方法获取系统的Configuration对象:

Configuration cfg = getResource().getConfiguration();

三、Handler、Loop及MessageQueue

Android中不允许子线程执行UI操作,只能通过利用Handler达到目的。

Handler的主要作用有两个:

1.在新启动的线程中发送消息

2.在主线程中获取、处理消息

Handler处理的消息来源于MessageQueue,而MessageQueue由Loop进行管理。

子线程需要执行UI操作的流程为:子线程将消息请求加入至MessageQueue的末尾->主线程从子线程的MessageQueue中获取到该消息后,回调子线程中的handleMessage函数,执行处理动作。

实现有UI操作需求子线程类,在public void run()中需编写以下几步:

1.调用Looper.prepare();创建该线程的MessageQueue

2.定义Handler,重载handleMessage函数。主线程从子线程的MessageQueue中取出消息后回调该函数执行UI操作

3.Looper.loop();启动Looper。

主UI线程中系统已初始化了一个Looper对象,因此不需要执行Looper.prepare,Looper.loop()

四、AsyncTask

时间: 2024-10-22 08:15:41

疯狂Android讲义第三章-Android的事件处理的相关文章

疯狂java 讲义第三章练习题---画圆

public class PaintRound{ /** * @author Dream_e. * @version v1.0 */ private int r;//圆的半径 PaintRound(int r){ this.r = r; } public void paint(){ int y = 2*r;//y的最大值为半径的2倍 int x = 0; int c = 0; int z = 2;//坐标轴递减量. for(int j = y; j >= 0; j-=z){ x = getX(r

Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读

 编者按 JRedu 杰瑞教育原创系列教材将于年后与大家正式见面.为更好的借鉴读者意见,我们将会陆续地在博客园推出一系列教材试读.我们也热忱的欢迎广大博友与我们互动,提出宝贵意见. 本篇博客将推出教材第三章第二部分的试读(传送门:第一部分),请大家继续提出宝贵意见,我们也将为积极互动的博友,免费提供我们的原创教材以及更多福利,也欢迎大家加入最下方QQ群与我们交流,谢谢大家! 3.5 系统设置事件处理 3.5.1onConfigurationChanged响应事件 在App开发过程中,有时候需要获

【ALearning】第三章 Android基本常见控件

本章主要介绍基本的平常较多使用的控件,包括TextView.EditView.ImageView.Button等.本章将介绍相关控件基本属性的使用,为以后章节的进阶学习提供基础.案例中引用的LinearLayout布局,可先不必深究,后续章节将会详细介绍. TextView TextView控件的基本属性,android:layout_width 布局宽度android:layout_height 布局高度.这两个属性参数是必须的. TextView 中android:layout_width与

Android 渗透测试学习手册 第三章 Android 应用的逆向和审计

第三章 Android 应用的逆向和审计 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们将查看 Android 应用程序或.apk文件,并了解其不同的组件. 我们还将使用工具(如 Apktool,dex2jar 和 jd-gui)来逆向应用程序. 我们将进一步学习如何通过逆向和分析源代码来寻找 Android 应用程序中的各种漏洞. 我们还将使用一些静态分析工具和脚本来查找漏洞并利用它们. 3.1 Android 应用程序拆解 Android 应

第三章 Android绘图机制与处理技巧

1.屏幕尺寸信息 屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DPI(Dots Per Inch),它是对角线的像素点数除以屏幕大小得到的:系统屏幕密度:android系统定义了几个标准的DPI值作为手机的固定DPI.(注,最后一个有笔误,正确的是1080x1920)独立像素密度(DP):android系统使用mdpi屏幕作为标准,在这个屏幕上1dp=1px,其他屏幕可以通过比例进行换算.在hdpi中,

Android学习笔记—第二章 Android四大组件

第二章 Android四大组件 Activity(活动窗口): Android程序中最基本的模块,为用户操作而展示的可视化用户界面.一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计. (1)Activity的生命周期 创建→运行   onCreate   onStart   onResume 运行→销毁   onPause    onStop    onDestory 运行→停止(不可见  不可操作)

Android退出程序(三)——Android事件总线

概述 当我们跟随时间的脚步向前挪动的时候,总能发现原来以前的自己做了一些愚蠢的事情.但,不见得以前就是不好的事情.我在以前的博客中写过两种关于Android中如何退出应用程序的方法.近日,我又发现了一个看似高大上的方法,因为作为程序员的你,使用起来会更加方便.它就像是你得心应手的工具,在需要的时候让你有一种,还好有它的感觉.下面我就使用Android事件总线来对Android退出程序作一个说明. AndroidEventBus简介 AndroidEventBus是一个Android平台的事件总线

简单的学习心得:网易云课堂Android开发第三章自定义控件

这一章分三部分: (1)自定义控件:老师先简单讲解了一些细节,如为什么不用px,而要用dp,只因机型的屏幕分辨率不同,用px会导致差异太大.然后演示了制作自定义控件的步骤,先在xml文件中添加对应的自定义View类,并给出画布大小,然后在.java中onDraw,值得注意的是onDraw中的坐标都是相对于画布(即xml中定义的)而言的,所以用具体数值去绘制view,很容易出现问题. (2)Fragment:第一点是两种设置fragment的方法.第一种是在.xml文件中,这是静态设置,不能交互:

第三章 Android 启动过程的底层实现

转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46367787 本文出自:[yujun411522的博客] 3.1 android正常模式启动流程 主要流程如下: 1.系统加电,执行bootloader,bootloader会将内核加载到内存中. 2.内核加载到内存之后首先进入内核引导阶段,最后调用start_kernel进入内核启动,start_kernel最终会启动init程序 3.init程序负责解析init.rc文件并