基于监听的事件处理机制
监听的工作原理?三个组件?
基于回调的事件处理机制
view组件的调用方法
①在该组件上触发屏幕事件: boolean onTouchEvent(MotionEvent event);
②在该组件上按下某个按钮时: boolean onKeyDown(int keyCode,KeyEvent event);
③松开组件上的某个按钮时: boolean onKeyUp(int keyCode,KeyEvent event);
④长按组件某个按钮时: boolean onKeyLongPress(int keyCode,KeyEvent event);
⑤键盘快捷键事件发生: boolean onKeyShortcut(int keyCode,KeyEvent event);
⑥在组件上触发轨迹球屏事件: boolean onTrackballEvent(MotionEvent event);
*⑦当组件的焦点发生改变,和前面的6个不同,这个方法只能够在View中重写哦! protected void onFocusChanged(boolean gainFocus, int direction, Rect previously FocusedRect)
传播机制
监听器—->view组件的回调方法—->Activity的回调方法了
**
Handler机制
- what:一套消息传递机制
- 作用:在多线程的应用中,将工作线程需要更新UI的信息传递给UI主线程,实现工作线程对UI的更新
why: 多线程并发更新UI时,保证线程安全
我们的新线程需要更新UI,新建一个Handler, 然后Handler发送信息进入MessageQuene,Looper根据先入先出原则处理MessageQuene中的信息,然后分配信息给Handler处理。
Handler的相关方法:
- void handleMessage(Message msg):处理消息的方法,通常是用于被重写!
- sendEmptyMessage(int what):发送空消息
- sendEmptyMessageDelayed(int what,long delayMillis):指定延时多少毫秒后发送空信息
- sendMessage(Message msg):立即发送信息
- sendMessageDelayed(Message msg):指定延时多少毫秒后发送信息
- final boolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息 如果是参数为(int what,Object object):除了判断what属性,还需要判断Object属性是否为指定对象的消息
基于触碰的监听TouchListener
监听EditText
Async Task异步任务
相关概念
- 多线程
- 应用程序(Application):为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)
- 进程(Process) :运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经理代码加载 -> 执行 -> 执行完毕的完整过程!
- 线程(Thread):比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行! 线程是由程序负责管理的!!!而进程则是由系统进行调度的!!!
- 多线程概念(Multithreading):并行地执行多条指令,将CPU的时间片按照调度算法,分配给各个线程,实际上是分时执行的,只是这个切换的时间很短,用户感觉是同时而已!
- 安卓会启动主线程,Main Thread,主要负责与UI相关的事件。我们使用Async Task实现进程更新。