Android 各版本迭代差异
Posted on
作为一个 Android 开发者,了解Android 系统各个版本的变更,是再基础不过的要求了。毕竟,适配也是我们日常的工作之一,面试时面试官也喜欢问类似的题目。
Android 12Android 12 API 31
行为变更
用户体验
拉伸滚动效果
应用启动画面
网络 intent 解析
沉浸模式下的手势导航改进
Display#getRealSize 和 getRealMetrics:废弃和限制
多窗口模式下的所有应用
大屏设备上
...
Android gradle.kts迁移
Posted on
随着 Gralde 和 kotlin 的迭代,Android Studio 里已经可以使用 kotlin 代替 groovy, 纯 kotlin 开发,dsl 特性在配置工作上更好理解,提示也比较友好。 gradle.kts 目前还有一个明显的缺点,构建效率比 groovy 低,但后续应该会做优化
Task 配置依赖插件管理插件管理平时我们 gradle 项目里使用的 application,library插件,在 plugin 代码
...
Android热修复方案
Posted on
Android 热修复方案已经出来多年了,根据实现方式看,基本上离不开以下两种:
方案调研
底层替换方案: 底层替换方案限制颇多,但时效性最好,加载轻快,立即见效
AndFix
Sophix
…
类加载方案: 类加载方案时效性差,需要重新冷启动才能见效,但修复范围广,限制少
QZone超级补丁
微信Tinker
…
以现有的方案对比,
支撑/方案
Tinker
QZone
AndFix
Robust
类替换
...
Android类加载机制
Posted on
学习 Android 的类加载机制前,需要具备以下两个知识点
Java 的类加载机制
Java反射
CLassLoader我们知道,Android 虚拟机是 Dalvik/ART VM。Dalvik/ART,加载类和资源也是要用到ClassLoader,不过 Jvm 通过 ClassLoader 加载的 class 字节码,而 Dalvik/ART VM 通过ClassLoader 加载则是 dex。
Android 的类加载器分为
...
framework学习のWMS服务
Posted on
Window简介Android中,Window是一个重要部分,用户看到的界面、触摸显示界面进行一系列操作都涉及到Window。但实际上,Window本身并不具备绘制功能。该篇简单介绍下Window的一点内容,同时总结下WMS的启动过程。在下篇会逐步介绍一个Activity是如何创建出窗口 并 添加到WMS中的。该篇基于Andorid10的代码。
窗口涉及到一下几个功能:
窗口管理-WMS: WMS管理窗口的创建、添加、删除、大小、层级
...
Handler Looper为什么不会造成卡顿
Posted on
我们在点击Launch桌面的图标第一次启动Activity时,会最终走到ActivityThread的main方法,在main方法里面创建Looper和MessageQueue 处理主线程的消息,然后 Looper.loop() 方法进入死循环,我们的 Activity 的生命周期都是通过 Handler 机制处理的,包括 onCreate、onResume等方法
public static void main(String[] arg
...
Activity & Window & View的关系
Posted on
onCreate() - Window 创建过程
在 Activity 创建过程中执行 scheduleLaunchActivity() 之后便调用到了 handleLaunchActivity() 方法。
ActivityThread.handleLaunchActivity():
private void handleLaunchActivity(ActivityClientRecord r, Intent customInten
...
Framework浅析
Posted on
App启动过程App启动过程点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求system_server进程接收到请求后,向zygote进程发送创建进程的请求Zygote进程fork出新的子进程,即App进程App进程,通过Binder IPC向sytem_server进程发起attachApplication请求system_server进程在收到请求后,
...
ffmpeg-结构体汇总
Posted on
常用结构体汇总
FFmpeg里面最常用的数据结构,按功能可大致分为以下几类(以下代码行数,以branch: origin/release/3.4为准):
封装格式
AVFormatContext - 描述了媒体文件的构成及基本信息,是统领全局的基本结构体,贯穿程序始终,很多函数都要用它作为参数;
AVInputFormat - 解复用器对象,每种作为输入的封装格式(例如FLV、MP4、TS等)对应一个该结构体,如libavforma
...