首页 > 代码库 > Android 事件
Android 事件
- Android提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理.
- 基于监听器:View class中有许多事件监听器要实现的接口如View.OnClickListener,单击事件监听器。 通常使用内部类或者匿名类定义事件监听器,当某个事件监听器需要被多个GUI界面共享,则考虑使用外部类的形式实现事件监听器类。直接绑定到标签的事件函数 不是定在事件源的类中,而是在Activity中
- 基于回调:当用户在GUI组件上激发某个事件时,组件自己特定的方法就会负责处理该事件,为了实现回调机制事件,Android为所有GUI组件提供了一些事件处理程序的回调方法,自定义View时要重写这些方法
- 基于回调的事件传播:几乎所有事件处理方法都返回boolean型,true表示事件已经处理完毕,不需要传播,false则表示要传播出去, 会触发Activity的回调方法,只要事件能传播到Activity
- 当组件既定义了事件监听器,又定义了回调方法,触发事件时会首先执行事件监听器的方法,然后才执行回调方法,并可以传播到该组件所在的Activity. 如果事件监听器的事件处理程序返回true了,那么组件的回调方法也不会调用了
- 响应系统设置的事件
- Configuration类:专门用于描述手机设备上的配置信息,这些配置包含用户特定的配置项,也包括系统动态的设备配置,要监听系统设置更改,可以设置Activity的configChanges属性指定要监听的类型,重写Activity的onConfigurationChanged方法,获取Configuration的方法:Configuration cfg=getResources().getConfiguration()
- Android的UI操作并不是线程安全的,Android制定了一条规则:只允许UI线程修改Activity里的 UI组件,当程序第一次启动时,Android会启动一条主线程负责处理与UI相关的事件,所以主线程通常又叫做UI线程
- 为了解决多线程中新线程访问界面组件的问题,需要使用Handler类,Handler的作用有两个:
- 在新启动的线程中发送消息
- 在主线程中获取,处理消息
- 通常与Handler一起工作的类有:
- Message:Handler接受和处理的消息对象
- Looper:每个线程只能有一个Looper,负责读取MessageQueue中的消息,读到消息后把消息交给Handler处理,Looper构造函数中会创建MessageQueue对象。Handler要正常工作,当前线程必须有一个Looper对象,主UI线程中系统已经初始化了一个Looper对象,程序直接创建Handler对象即可,程序员自己启动的线程,必须自己创建一个Looper对象,并启动它。创建Looper对象需要调用它的prepare()方法,再调用loop方法启动
- MessageQueue:消息队列,采用先进先出的方式管理Message
- 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 事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。