Weiwq blog

做一个会编程的作家

【置顶】Android Input系统事件分发分析

" Android是怎么分发触摸事件的?"

“本文基于Android13源码,分析Input系统中,事件分发的实现原理“ 整个事件分发到事件的确认过程很长,如果读者只是想大概了解一下,可以直接看末尾总结部分的流程图。 1. 前言 在文章之前,有必要提一下InputReader。其在启动的时候,会创建一个InputReader线程,用于从/dev/input节点获取事件,转换成EventEntry事件加入到InputDis...

【置顶】带你细看Android input系统中ANR的机制

"从点击事件卡顿,到显示 Application not responding 对话框,你知道Android都做了哪些工作吗?"

“本文基于Android13源码,分析Input系统的Anr实现原理“ 前言 在文章之前,先提几个问题: 如果在activity任意周期(onCreate,onResume等),同步执行耗时超过5s(ANR时间)的任务,期间不进行点击,那会触发ANR吗? 如果在button点击的时候,在onClick回调同步执行耗时超过5s的任务。点击一次会触发ANR吗?点击2次呢,...

【置顶】【framework】Activity 生命周期调用原理

"带你分析Android 13上activity的生命周期流程"

这一篇会重点分析客户端调用activity的生命周期流程 引言 上一篇讲了activity的创建过程(没看过的小伙伴移步 点我前往),那这一篇就讲讲activity的生命周期。 在高版本上,activity的周期都是以事务的方式调用,activityThread里面H类的EXECUTE_TRANSACTION 消息正是接收、处理事务的入口,实际最终由TransactionExe...

【置顶】【framework】startActivity流程

"带你细看Android13上activity的启动流程"

一步步看,你就会对activity的启动流程有深刻的认知。 引言 从Android11开始,Activity的启动流程与Android10的实现(可以参考Activity的启动过程详解(基于10.0源码))又不一样了,但是万变不离其中,变的更多是代码上的优化。 如果不想看代码,可以直接看对应的时序图。 1 startActivity流程 1.1 Activity 代...

Service启动流程之bindService

" 带你看Android 13下bindService的实现 "

前言 在【Service启动流程之startService】 中,我们已经分析了startService的流程,这篇就继续讲bindService的流程,他们两有很多相似之处。同样,流程图在总结处。 我们在调用bindService方法时候,实际调用的是ContextImpl的实现。 1. ContextImpl 代码路径:frameworks\base\core\java\a...

Service启动流程之startService

" 带你看Android 13下startService的实现 "

前言 启动service有两种方式:startService和bindService。 这一篇先讲startService,读者如果只想看流程图,可以直接跳到总结。 1. ContextImpl 代码路径:frameworks\base\core\java\android\app\ContextImpl.java 1.1 startService 我们在调用startSer...

LiveData生命感知原理

"从源码带你剖析LiveData"

“ LiveData是如何做到感知生命周期的“ 优势 使用LiveData有以下优势 数据及时刷新:无论前台任务还是后台任务,只要当前页面处于活跃状态,就能马上刷新数据 不会因 Activity 停止而导致崩溃:如果观察者的生命周期处于非活跃状态,则它不会接收任何 LiveData 事件。 共享资源:您可以使用单例模式扩展 LiveData 对象以封装系统服务,以...

DataBinding的双向绑定实现原理

"从源码带你剖析DataBinding"

“ 悄悄咪咪告诉你,DataBinding是怎么实现双向绑定的“ 在讲DataBinding之前,有必要讲讲ViewBinding ViewBinding 配置 要使用ViewBinding,只需要在gradle 添加如下配置即可 android { ... viewBinding { enabled = true ...

java注解详解

"使用java注解的正确姿势"

“揭开java注解的神秘面纱“ 介绍 想必大家在接触java,甚至部分工作几年的,对于类、方法、字段上的 @xxx 都有一种迷茫:这是啥玩意,它是怎么运行起来的? 别慌,这就是java的注解,一个很常见但又神秘的特性。 我们从最熟悉的Override注解开始,Override对应的声明如下,可以看到,注解与接口的声明很相似,只不过多了一个@。 @Target(Elemen...

Android App性能监控工具

"多维度分析app的性能"

“工欲善其事,必先利其器“ 一、LeakCanary LeakCanary 想必大家都有了解一些,主要用于分析activity、fragment的内存泄露的问题。 在主module下的gradle导入如下依赖即可 dependencies { // debugImplementation because LeakCanary should only run in debu...