识别用户行为以及手机自身行为,官方称呼“事件处理”。
我从识别用户行为说起,我们希望在某个地方识别用户的某个行为,我们通常会采用监听器,listener。
用户的行为有些什么呢?(以下为自己取名字和分类,如需知晓专业名词,看相关书籍)
屏幕类:点击,滑动,长按,多指操作等。
硬件类:按电源键,返回键,home键等。
传感器类:摇动,翻转,横竖屏切换等。
对于用户三大类行为,屏幕类是使用最多的一种情况,以及listener对用户行为的识别,也是针对屏幕类。
举个例子,点击按钮,希望实现内容1,代码如下:
OnClickListener a = new OnClickListener() {
@Override
public void onClick(View view) {
内容1;
}
}
button.setOnClickListener(a);
从代码看,button.setOnClickListener(a) 首先是一个button按钮,这个按钮就是一个组件。 这里我在button上绑定了一个点击的监听器。
我们来看看这个单词的含义,
Set是指设定,绑定。
On是回调方法的开头,其含义是,被某个情况所触发,而不是被某个方法直接调用
Click是指点击操作
Listener是指监听器。
这加起来就是这个方法的含义,绑定一个由点击操作触发的监听器。监听器就是一旦发生就会引起,这里也可以理解成,监听器一直监听着点击这个操作,一旦用户对button进行了点击就会起反应。
更多时候,我建议采用下面这个手法来绑定,其实质都是一样的。
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
内容1;
}
});
这个绑定监听器的手法,不再创建a这个对象,而是直接在setOnClickListener这个方法内部创建对象了。
那么这个对象是一个类,OnClickListener,在使用时,我们需要重写其onClick方法,你也可以不重写,不重写的话,点击就没有效果。重写的话,就在点击的时候,运行内容1 。
new OnClickListener() {
@Override
public void onClick(View view) {
内容1;
}
}
这个@Override是指下面这个方法是重写的方法,我们重写的是onClick方法。
其实监听器大部分是跟着组件走的,很多组件都有默认的监听器。这部分,也是关于我之前说的“组件本身内容相关”的设置部分,使用与用户有交互的组件时,都要用心写好这部分代码。
下面讲解,自定义监听器。自定义监听器,是接口类。
为什么时候需要用到自定义监听器呢,最简单的情况是,某个行为,被其他多个行为所监听,其他多个行为在当前写代码时,不能完全确定下来,究竟有多少个其他行为。
用模拟驾驶程序来举例说明。假设在车子开始启动的时候,需要在周围加载道路两旁的物品,这里可以自定义一个监听器,监听车子启动的行为,当车子启动,周围的物品就开始加载。
这里,我们不知道有哪些物品要加载,就使用监听器来完成。车子启动的时候,调用监听器,所有在监听的物品就会一一加载。
上面这个例子用来理解监听器的用途,但是实际实现的时候,有一种叫做观察者的设计模式,是更加详细的高级实现方案,有兴趣者可以学习一下,我后期也会学习设计模式的。
关于回调。
识别用户行为,除了监听器,还有就是回调了。其实回调就是监听器,监听器就是回调。区别是监听器是帮得到其他地方,回调就在类里面。但是他们的本质都是一样的。
比如,我创建一个Button类,然后将这个类创建对象,放到桌面上。在创建这个类里面,可以直接重写onclick方法,这里onclick方法被调用就属于回调。
最常见的回调:
Oncreat是使用最多的回调,每个activity即每个app都会用到。
这里我们会发现回调和监听器的方法共同特征是,on开头的,on表示会在某个情况下主动被调用,这种方法,也告诉我们,不要在其他手写的方法里面调用。
除非特殊情况,不要在其他自己写的方法里面调用on开头的方法,因为on开头的方法,有着自己的触发条件,自己写的方法里面调用属于扩展了调用的范围,对于代码的健壮性是很大的伤害。
正常情况下,android自带的on开头的方法已经足够,在使用某个组件的时候,去看看它蕴含的on方法,足以应对中小型的编程。