首页 > 代码库 > Android 事件

Android 事件

  1. Android提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理.
  2. 基于监听器:View class中有许多事件监听器要实现的接口如View.OnClickListener,单击事件监听器。 通常使用内部类或者匿名类定义事件监听器,当某个事件监听器需要被多个GUI界面共享,则考虑使用外部类的形式实现事件监听器类。直接绑定到标签的事件函数 不是定在事件源的类中,而是在Activity中
  3. 基于回调:当用户在GUI组件上激发某个事件时,组件自己特定的方法就会负责处理该事件,为了实现回调机制事件,Android为所有GUI组件提供了一些事件处理程序的回调方法,自定义View时要重写这些方法
  4. 基于回调的事件传播:几乎所有事件处理方法都返回boolean型,true表示事件已经处理完毕,不需要传播,false则表示要传播出去, 会触发Activity的回调方法,只要事件能传播到Activity
  5. 当组件既定义了事件监听器,又定义了回调方法,触发事件时会首先执行事件监听器的方法,然后才执行回调方法,并可以传播到该组件所在的Activity. 如果事件监听器的事件处理程序返回true了,那么组件的回调方法也不会调用了

  6. 响应系统设置的事件
    • Configuration类:专门用于描述手机设备上的配置信息,这些配置包含用户特定的配置项,也包括系统动态的设备配置,要监听系统设置更改,可以设置Activity的configChanges属性指定要监听的类型,重写Activity的onConfigurationChanged方法,获取Configuration的方法:Configuration cfg=getResources().getConfiguration()

  7. Android的UI操作并不是线程安全的,Android制定了一条规则:只允许UI线程修改Activity里的  UI组件,当程序第一次启动时,Android会启动一条主线程负责处理与UI相关的事件,所以主线程通常又叫做UI线程

  8. 为了解决多线程中新线程访问界面组件的问题,需要使用Handler类,Handler的作用有两个:
    • 新启动的线程中发送消息
    • 主线程中获取,处理消息

  9. 通常与Handler一起工作的类有:
    • Message:Handler接受和处理的消息对象
    • Looper:每个线程只能有一个Looper,负责读取MessageQueue中的消息,读到消息后把消息交给Handler处理,Looper构造函数中会创建MessageQueue对象。Handler要正常工作,当前线程必须有一个Looper对象,主UI线程中系统已经初始化了一个Looper对象,程序直接创建Handler对象即可,程序员自己启动的线程,必须自己创建一个Looper对象,并启动它。创建Looper对象需要调用它的prepare()方法,再调用loop方法启动
    • MessageQueue:消息队列,采用先进先出的方式管理Message

  10. Android建议耗时的操作应该放在新线程中,AsyncTask类适用于简单的异步处理,不需要借助线程和Handler即可实现异步编程(新线程)。还有个AsyncTask<Params,Progress,Result>的抽象类。调用AsyncTask抽象类的子类时必须遵循如下规则:
    • 必须在UI线程中创建AsyncTask的实例
    • 必须在UI线程中调用AsyncTask的execute()方法
    • AsyncTask的onPreExecute(),onPostExecute(Result result),doInBackground(Params params),onProgressUpdate(Progress values)方法只能有Android系统调用,程序员不能调用
    • 每个AsyncTask只能被执行一次,多次调用将会引发异常

 

Android 事件