Android 事件分发
概要
先上图,注意看左下角方法所属
当一个点击事件(MotionEvent )产生后,系统需把这个事件传递给一个具体的 View 去处理
一次完整的 MotionEvent 事件:ACTION_DOWN(1次) -> ACTION_MOVE(N次) -> ACTION_UP(1次)
顺序 Activity -> ViewGroup -> View
先上图,注意看左下角方法所属
当一个点击事件(MotionEvent )产生后,系统需把这个事件传递给一个具体的 View 去处理
一次完整的 MotionEvent 事件:ACTION_DOWN(1次) -> ACTION_MOVE(N次) -> ACTION_UP(1次)
顺序 Activity -> ViewGroup -> View
删除重复资源
右击项目 refactor/remove unused resources ,或 lint 工具来搜索项目中不再使用的图片等资源
重复资源优化
文件名不一样,但是内容一样的图片,可以通过比较 md5 值来判断是不是一样的资源,然后编辑 resources.arsc 来重定向
Handler 可以发送、处理 Message 和与线程关联的 Runnable 对象 MessageQueue ,每个 Handler 实例都与一个线程和该线程的消息队列关联。创建新的 Handler 时会绑定到 Looper。它将消息和线程传递到该 Looper 的消息队列,并在该 Looper 的线程上执行它们
Handler 两个主要用途:在将来某个时刻执行消息和线程。在不同线程(切换线程)按顺序执行操作
发送方法有 post(Runnable) , postDelayed(Runnable, long), sendMessage(Message) 等 默认通过 handleMessage(Message) 处理接收 Message
Handler 通过 sendMessage 发送 Message 到 MessageQueue 队列,Looper 通过 loop() 从 MessageQueue 取出 Message,再经过 msg.target.dispatchMessage 交给 Handler 的 handleMessage() 进行处理