Android 事件分发

概要

先上图,注意看左下角方法所属

touch

当一个点击事件(MotionEvent )产生后,系统需把这个事件传递给一个具体的 View 去处理

一次完整的 MotionEvent 事件:ACTION_DOWN(1次) -> ACTION_MOVE(N次) -> ACTION_UP(1次)

顺序 Activity -> ViewGroup -> View

APK 瘦身

减少 res 资源大小

  • 删除重复资源
    右击项目 refactor/remove unused resources ,或 lint 工具来搜索项目中不再使用的图片等资源

  • 重复资源优化
    文件名不一样,但是内容一样的图片,可以通过比较 md5 值来判断是不是一样的资源,然后编辑 resources.arsc 来重定向

Android Handler

Handler 概要

官方文档

Handler 可以发送、处理 Message 和与线程关联的 Runnable 对象 MessageQueue ,每个 Handler 实例都与一个线程和该线程的消息队列关联。创建新的 Handler 时会绑定到 Looper。它将消息和线程传递到该 Looper 的消息队列,并在该 Looper 的线程上执行它们

Handler 两个主要用途:在将来某个时刻执行消息和线程。在不同线程(切换线程)按顺序执行操作

发送方法有 post(Runnable) , postDelayed(Runnable, long), sendMessage(Message) 等 默认通过 handleMessage(Message) 处理接收 Message

Handler、Message、MessageQueue以及Looper

  • Handler 负责发送和处理消息(Handler发送消息给 MessageQueue 和接收 Looper 返回的消息并且处理消息)
  • Message 用来携带需要的数据
  • MessageQueue 消息队列(实际用链表实现的),负责存放 Handler 发送过来 Message
  • Looper 负责不停的从 MessageQueue 中取 Message 交给 Handler 处理

Handler 通过 sendMessage 发送 Message 到 MessageQueue 队列,Looper 通过 loop() 从 MessageQueue 取出 Message,再经过 msg.target.dispatchMessage 交给 Handler 的 handleMessage() 进行处理

Android abiFilter 相关

为了优化apk的大小,一般会只选择支持一种ABI,可以在AS中双击apk,在lib路径下查看so文件占用大小 Android ABI概念 Application Binary Interface 官方文档 cpu