安卓有两套事件处理机制:
基于监听的事件处理:为组件绑定特定的事件监听器(甚至可以在XML文件中用onClick属性来绑定)
基于回调的事件处理:重写组件特定的回调方法,或者重写Activity的回调方法
boolean onKeyDown(int keyCode, KeyEvent event)
boolean onKeyLongPress(int keyCode, KeyEvent event)
boolean onKeyShortcut(int keyCode, KeyEvent event)(键盘快捷键)
boolean onKeyUp(int keyCode, KeyEvent event)
boolean onTouchEvent(MotionEvent event)
boolean onTrackballEvent(MotionEvent event)(轨迹球屏)
几乎所有的基于回调的事件处理方法都有一个boolean类型的返回值,用于标识该方法是否能完全处理该事件:
返回true,表示该处理方法已完全处理该事件,该事件不会传播出去;
返回false,表示该处理方法未完全处理该事件,该事件会传播出去。
在安卓中,监听的优先级高于回调
Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的配置项,也包括系统的动态设备配置。程序可调用Activity的如下方法来获取系统的Configuration对象:
Configuration cfg = getResources().getConfiguration();
为了让Activity能监听系统配置的更改事件,需要在AndroidManifest.xml文件中指定android:configChanges属性。
Handler消息传递机制
安卓的UI操作不是线程安全的,因此安卓制定了一条简单的规则:只允许UI线程修改Activity里的UI组件。当一个程序第一次启动时,安卓会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件。因此,在安卓中,新启动的线程要借助Handler的消息传递机制来实现更改UI组件。
Handler类的主要作用:
在新启动的线程中发送消息;在主线程中获取、处理消息。
Handle类的常用方法:
void handleMessage(Message msg):处理消息的方法
final boolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息
final boolean hasMessage(int what,Object object):检查消息队列中是否包含what属性为指定值且object属性为指定对象的消息
多个重载的Message obtainMessage():获取消息
sendEmptyMessage(int what):发送空消息
final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后发送空消息
final boolean sendMessage(Message msg):立即发送消息
final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后发送消息