Android-SharedPreferences简析 SharedPreferences是系统提供的一种简易数据持久化手段,适合单进程、小批量的数据存储与访问。以键值对形式存储在xml文件中。文件存储路径为data/data/package_name/shared_prefs/目录。 源码解析 获取SharedPreferences对象 获取方法从getSharedPreferences(name,mode)开始,此时就需要去加载对应name的xm 2020-11-18 #Android
Android - Drawable相关 Drawable简介 Drawable是一种 可以在Canvas上进行绘制的对象,即可绘制物。与View不同,Drawable没有事件和交互的方法。 在实际开发中,Drawable通常被用作View的背景,一般通过XML进行定义,也支持通过代码去实现(例如动画样式的Drawable)。 Drawable是一个抽象类,是所有Drawable的基类。例如常用的ShapeDrawable、Bitmap 2019-01-10 #Android
Android动画-属性动画 对作用对象进行了扩展,可以对任何对象做动画,甚至可以没有对象。 1.与View动画进行比较 View动画的作用对象只能是View,属性动画可以作用于所有Java对象 View动画并没有改变View的属性,只是改变了View的视觉效果,并不具有交互性(例如:无法响应动画后的点击事件。);属性动画是真正的对View的属性进行了修改,可以方便后续的交互操作。 View动画的效果比较单一,只能实现一 2020-10-12 #Android
Android-事件分发机制 当用户触摸屏幕或者按键操作。 首先触发硬件驱动,驱动收到事件后,将相应事件写入到输入设备节点 输入系统取出内核事件,封装成为KeyEvent或MotionEvent 交付给对应的Window消费该事件。 硬件中断 物理设备将数据发送给内核是通过设备驱动传输的,在dev/input/目录下有几个设备文件eventX。 其中event0对应的就是触摸屏,当触摸屏的驱动被挂载后,驱动程序就会 2020-11-20 #Android
Android布局优化-AsyncLayoutInflater简析 布局加载过程中存在两个耗时点: 布局文件读取慢,涉及IO操作 根据<tag>创建View慢(createViewFromTag()),使用反射的方式创建View。布局嵌套层数越多,控件个数越多,反射的次数就会越多。 当XML文件过大、嵌套过深时,就会导致页面发生卡顿甚至ANR。 解决方案有两种: 直接解决:不使用IO操作以及反射 侧面缓解:把耗时操作放到子线程,等待加载完毕返回 2020-11-02 #Android
Android-SurfaceFlinger解析 基于Android 6.0源码进行分析 SurfaceFlinger是Android系统中最重要的图像消费者,Activity绘制的界面图像,都会传递到SurfaceFlinger中。 主要作用:接收图像缓冲区数据,然后交给HWComposer或OpenGL合成,合成完毕后再返回。 SurfaceFlinger初始化init通过执行surfaceflinger.rc文件,然后就执行到了ma 2020-12-21 #Android
Android-流量统计 流量统计Android目前提供了两种流量计算方案 TrafficStats NetworkStatsManager 这两种方案有着各自的优缺点与限制,下面简单的记录一下 TrafficStats Android API8后提供的该类,可以获取设备重启以来的流量信息。 12345678public class TrafficStats { public static long g 2020-09-15 #Android
Android性能优化-启动优化 App启动分为三种:冷启动、热启动、温启动 启动优化主要在冷启动时进行。 冷启动——Cold Start 开机后第一次启动应用 或者 应用被杀死后再次启动。 冷启动耗时检测 adb命令 1234adb [-d|-e|-s <serialNumber>] shell am start -S -W com.example.app/.MainActivity -c andr 2020-10-08 #Android
Android Dex文件学习 Dex文件Dex(Dalvik Executable)是 Android 运行时可直接消费的字节码格式。 核心目标: 把多个.class合并为更紧凑的数据结构,减少包体与内存占用 采用“共享常量池 + 索引表”降低重复信息 为 ART 运行时加载、校验、链接提供统一输入 补充: Java/Kotlin 编译后先得到.class,再由D8/R8转成classes.dex APK 2019-09-24 #Android
Android匿名共享内存-Ashmem 什么是 AshmemAshmem(Anonymous Shared Memory)是 Android 早期常用的跨进程共享内存机制。 它的核心目标是: 在进程间共享同一块内存 减少大数据在 IPC 过程中的重复拷贝 让 Binder 只负责“控制信令 + 句柄传递” 为什么需要 AshmemBinder 很适合传输小对象、命令和控制信息,但不适合高频大数据块(例如图像帧、音频缓冲)。 典型组合 2020-10-31
Android崩溃优化 崩溃优化目标崩溃优化的核心不是“拦截崩溃”,而是建立稳定性治理闭环: 发现:完整采集崩溃现场 定位:快速还原调用链和上下文 修复:以影响面和复现率排序处理 验证:灰度观测 + 回归验证 崩溃类型划分Java Crash典型表现:FATAL EXCEPTION,常见来源有NullPointerException、越界、并发状态错误等。 Native Crash典型表现:signal 11(SIG 2019-07-20
Android系统启动过程 启动总览Android 启动链路可以先按 7 个节点记忆: BootROM BootLoader Linux Kernel init(用户空间 1 号进程) Zygote SystemServer Launcher(Home) 补充:从 framework 视角,真正高频关注的是 init -> Zygote -> SystemServer -> Launcher 这条链路。 2020-11-12 #Android
Android性能优化-LeakCanary LeakCanary主要用来进行内存泄漏检测,并且可以直观的展示泄漏的路径 如何使用1234dependencies { // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakc 2020-10-14 #Android