<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Android学习笔记]]></title><description><![CDATA[博客大都是自己整理的精华笔记，包含Java和Android两大部分]]></description><link>https://blog.youkuaiyun.com/ROX0008</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ROX0008]]></copyright><item><title><![CDATA[【Android进阶笔记】系统启动流程（init进程、Zygote进程、SystemServer）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/116792460</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/116792460</guid><author>ROX0008</author><pubDate>Fri, 14 May 2021 15:08:25 +0800</pubDate><description><![CDATA[文章目录1. 系统启动流程概括2. init 进程启动2.1. init 进程的入口函数2.2. 解析 init.rc 文件3. Zygote 进程启动3.1. 启动过程3.1.1. app_main.cpp3.1.2. AndroidRuntime.cpp3.1.3. ZygoteInit.java3.1.4. ZygoteServer.java3.2. 启动总结4. SystemServer 的处理4.1. 启动 SystemServer 进程4.1.1. 启动 Binder线程池4.1.2. main]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】虚拟机（Dalvik、ART）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/116742696</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/116742696</guid><author>ROX0008</author><pubDate>Thu, 13 May 2021 11:25:10 +0800</pubDate><description><![CDATA[文章目录Dalvik 虚拟机与 JVM 的区别架构区别字节码区别其他区别DVM 运行时堆COW 策略运行时堆垃圾回收GC 日志GC 原因其他字段日志示例ART 虚拟机与 DVM 的区别运行机制区别CPU 区别解释器、JIT 和 AOT简介三者的配合method 的编译运行垃圾回收Android 8 之前Android 8 开始Android 10 开始GC 日志GC 原因垃圾收集器名称其他字段


Dalvik 虚拟机
Dalvik 虚拟机（Dalvik Virtual Machine），简称 DVM。它并]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】热修复（代码、资源、动态链接库）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/116597518</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/116597518</guid><author>ROX0008</author><pubDate>Mon, 10 May 2021 15:43:34 +0800</pubDate><description><![CDATA[文章目录1. 热修复1.1. 作用1.2. 主流热修复框架1.2.1. 主流框架1.2.2. 框架对比2. 代码修复2.1. 类加载方案2.1.1. Dex 分包机制2.1.2. 类加载2.1.3. 修复方案2.2. 底层替换方案2.2.1. ArtMethod2.2.2. 修复方案2.3. Instant Run 方案2.3.1. Instant Run 原理2.3.2. 修复方案3. 资源修复4. 动态链接库修复4.1. so 的加载4.2. 注册 Native 方法4.2.1. 静态注册Native方]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】NDK-C++面向对象（封装、继承、多态、RVO、NRVO）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114583372</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114583372</guid><author>ROX0008</author><pubDate>Tue, 09 Mar 2021 15:02:59 +0800</pubDate><description><![CDATA[文章目录1. 类与对象1.1. C++ 类定义1.1.1. 类访问修饰符1.1.2. 构造函数 &amp; 析构函数1.1.3. 静态成员1.2. C++ 函数1.2.1. 拷贝构造函数1.2.2. 友元函数1.2.3. 内联函数2. 函数重载和运算符重载2.1. 函数重载2.2. 运算符重载2.2.1. 可重载运算符2.2.2. 不可重载运算符3. 封装4. 继承4.1. 继承类型4.2. 多继承4.3. 基类 &amp; 派生类5. 多态5.1. 静态多态5.2. 动态多态（虚函数）5.2.1. 虚函数]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】NDK-C/C++基础核心（数组、指针、函数、预处理器、结构体）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114576949</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114576949</guid><author>ROX0008</author><pubDate>Tue, 09 Mar 2021 10:31:29 +0800</pubDate><description><![CDATA[文章目录1. 数据类型1.1. 基本类型1.2. bool 类型1.3. void 类型2. 数组2.1. 声明数组2.2. 初始化数组2.3. 动态数组2.3.1. malloc2.3.2. calloc2.3.3. realloc2.3.4. free3. 指针3.1. 指针与数组3.1.1. 数组指针3.1.2. 指针数组3.2. 指针与常量3.2.1. 常量指针3.2.2. 指针常量3.2.3. 常指针常量3.3. 多级指针4. 函数4.1. 函数声明4.2. 函数定义4.3. 传递参数的方式4.3]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】Java泛型原理（类型擦除）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114576799</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114576799</guid><author>ROX0008</author><pubDate>Tue, 09 Mar 2021 10:19:49 +0800</pubDate><description><![CDATA[文章目录1. 泛型的概念2. 泛型的使用2.1. 泛型类/接口2.2. 泛型方法2.3. 通配符2.4. 上下边界限定3. 泛型的原理3.1. 类型擦除3.1.1. 未指定上界的泛型类型会以`Object`类型替换3.1.2. 已指定上界的泛型类型会以上界类型替换3.2. 绕过编译时泛型类型检查


1. 泛型的概念
泛型，即“参数化类型”。就是将类型由原来的具体的类型参数化，类似于方法中的变量参数，此时类型也定义成参数形式（类型形参），然后在使用/调用时传入具体的类型（类型实参）。

JDK1.5 之后引]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】进程保活]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114530421</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114530421</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:32:33 +0800</pubDate><description><![CDATA[文章目录1. 进程的优先级1.1. 前台进程1.2. 可视进程1.3. 服务进程1.4. 后台进程1.5. 空进程2. LowmemoryKiller2.1. 原理2.2. 划分标准3. 进程保活3.1. Activity提权3.2. Service提权3.3. 广播拉活3.4. 全家桶拉活3.5. 推送拉活3.6. Sticky Service拉活3.7. JobScheduler 拉活3.8. 系统账户拉活3.9. 双进程守护3.10. 自启动白名单


1. 进程的优先级

https://devel]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】图片优化（理论大小和实际大小的计算方式）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114530366</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114530366</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:31:34 +0800</pubDate><description><![CDATA[文章目录1. 图片压缩格式1.1. 常见的图片格式1.2. WebP格式2. Android内存中的图片2.1. 位图配置Bitmap.Config2.2. 计算占用内存大小2.2.1. 理论值2.2.2. 实际值3. 图片压缩3.1. 质量压缩3.2. 采样率压缩3.3. 尺寸压缩3.4. 图片压缩总结3.5. 实际效果对比


1. 图片压缩格式
1.1. 常见的图片格式




格式
质量
透明
压缩方式




png
较高
支持
图片压缩算法。把相似的颜色压缩在一起


jpg/jpeg
良好
不]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】内存优化（内存泄漏优化）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114530261</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114530261</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:30:36 +0800</pubDate><description><![CDATA[文章目录1. 内存抖动1.1. 现象1.2. 避免2. 内存泄漏2.1. 内存泄漏的检测与定位2.2. 常见的内存泄漏2.2.1. 静态变量内存泄漏2.2.2. 非静态内部类、匿名内部类内存泄漏2.2.3. 单例模式内存泄漏2.2.4. 系统服务内存泄漏2.3. 防止内存泄漏2.4. LeakCanary 工具


1. 内存抖动
短时间内创建大量对象，挤占 Eden 区，导致频繁 MinorGC，内存就会发生抖动。
1.1. 现象
​    
MemoryProfile内存图为锯齿状，并伴随大量的白色垃圾]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】渲染优化]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114530185</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114530185</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:28:34 +0800</pubDate><description><![CDATA[文章目录1. CPU与GPU协同工作原理1.1. CPU和GPU架构1.1.1. 画面显示过程1.1.2. 没有Vsync1.1.3. 有Vsync1.1.4. 掉帧查看2. CPU优化2.1. 视图层次结构优化2.2. \优化2.3. \优化2.4. \优化3. GPU过度绘制3.1. background优化4. GPU呈现模式分析


1. CPU与GPU协同工作原理
1.1. CPU和GPU架构


CPU：解析布局，生成View对象及位置属性，转化为多维矢量图形。

​    

GPU：将矢量图]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】APP启动优化]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114530118</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114530118</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:27:07 +0800</pubDate><description><![CDATA[文章目录1. 视觉优化1.1. 基本概念1.2. 默认情况1.3. 透明主题优化1.4. 图片主题2. 代码优化2.1. 冷启动耗时统计2.1.1. 方法一：adb2.1.2. 方法二：Logcat2.2. Application优化2.3. 闪屏页优化


1. 视觉优化
1.1. 基本概念
冷启动时，系统有三个任务：

加载并启动应用程序
启动后立即显示应用程序空白启动窗口
创建应用程序进程

应用程序进程创建后，就会负责下一阶段：

创建APP对象
启动主线程
创建应用入口的Activity对象
填充]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】事件分发机制]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114529747</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114529747</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:20:54 +0800</pubDate><description><![CDATA[文章目录1. DOWN 事件的流向2. MOVE 和 UP 事件的流向2.1. dispatchTouchEvent 返回 true2.2. onTouchEvent 返回 true2.3. 总结3. setOnTouchListener


1. DOWN 事件的流向


【关键点】

dispatchTouchEvent、onTouchEvent 返回 true：事件就停止传递了（没有谁能再收到这个事件）。
dispatchTouchEvent 返回 false：事件停止往子 View 传递和分发同时开]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】消息机制（Handler、Looper、MessageQueue、Message、IdleHandler）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114529243</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114529243</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:15:30 +0800</pubDate><description><![CDATA[文章目录1. Android 消息机制1.1. 消息机制的模型1.2. 消息机制的作用2. MessageQueue2.1. MessageQueue的插入2.2. MessageQueue的读取2.3. MessageQueue的退出3. Lopper3.1. Looper的创建和退出3.1.1. 创建 Looper3.1.2. Looper 的构造方法3.1.3. 退出 Looper3.2. Looper的循环4. Handler4.1. 发送消息4.2. 插队和撤回4.3. 处理消息5. 消息机制方法]]></description><category></category></item><item><title><![CDATA[【Android进阶笔记】Binder机制]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114529118</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114529118</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 14:10:33 +0800</pubDate><description><![CDATA[文章目录1. 传统的Linux进程间通信1.1. 基本原理1.2. 管道和消息队列的原理2. Binder原理2.1. Binder 是什么2.2. 动态内核可加载模块（LKM）2.3. 内存映射（mmap）2.4. Binder 数据流转原理2.5. Binder 和传统 IPC 对比2.5.1. 传统 Linux 跨进程2.5.2. Binder 的优势3. Binder 通信模型3.1. Client / Server / ServiceManager / Binder Dirver3.2. Bind]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】ThreadLocal]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462677</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462677</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 13:57:49 +0800</pubDate><description><![CDATA[文章目录1. ThreadLocal1.1. 作用1.2. 使用场景1.3. 示例代码2. ThreadLocal 原理解析2.1. 内部设计2.1.1. 早期方案2.1.2. JAVA 8 方案2.2. ThreadLocal 核心方法源码2.2.1. set 方法2.2.2. get 方法2.2.3. remove方法3. ThreadLocalMap 源码分析3.1. ThreadLocalMap 类的基本结构3.1.1. 成员变量3.1.2. 存储元素3.2. ThreadLocal 内存泄漏3.2]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】线程池（类比银行业务来理解）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462559</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462559</guid><author>ROX0008</author><pubDate>Mon, 08 Mar 2021 13:57:27 +0800</pubDate><description><![CDATA[文章目录1. Java 线程池1.1. 线程池的特点1.2. Java 中的线程池类1.3. 线程池的最佳容量2. ThreadPoolExecutor2.1. 线程池状态2.2. 基本原理2.2.1. 构造方法2.2.2. 组成部分2.2.3. 工作流程2.3. 拒绝策略2.3.1. JDK 的4种策略2.3.2. 其他策略2.4. Executors 工厂2.4.1. newFixedThreadPool()2.4.2. newCachedThreadPool()2.4.3. newSingleThre]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】synchronized原理（悲观锁和乐观锁）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462469</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462469</guid><author>ROX0008</author><pubDate>Sat, 06 Mar 2021 23:11:17 +0800</pubDate><description><![CDATA[文章目录1. 悲观锁（阻塞）1.1. 临界区与竞态条件1.1.1. 临界区1.1.2. 竞态条件1.1.3. 原子性1.2. synchronized 概念1.2.1. synchronized 修饰方法1.2.2. 变量的线程安全分析1.2.3. 常见的线程安全类1.3. Monitor（管程）1.3.1. Java 对象头1.3.2. Monitor1.4. synchronized 原理1.4.1. 轻量级锁1.4.2. 重量级锁1.4.3. 偏向锁1.4.4. 自旋优化1.4.5. 同步消除1.5.]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】Java内存模型（内存一致性、volatile原理）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462390</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462390</guid><author>ROX0008</author><pubDate>Sat, 06 Mar 2021 23:10:14 +0800</pubDate><description><![CDATA[文章目录1. 硬件内存模型1.1. 数据加载1.1.1. 处理流程1.1.2. 缓存行1.2. 执行流程2. Java 内存模型2.1. 内存划分2.1.1. 内存模型2.1.2. 模型类比2.2. 主内存与工作内存之间的交互操作2.2.1. 个交互协议2.2.2. 个基本规则2.3. 一致性2.3.1. 原子性2.3.2. 可见性2.3.3. 有序性2.4. 有序性原则2.4.1. happens-Before 原则2.4.2. as-if-serial 语义3. volatile 关键字3.1. 总线嗅]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】java并发（进程、线程、协程）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462311</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462311</guid><author>ROX0008</author><pubDate>Sat, 06 Mar 2021 23:07:47 +0800</pubDate><description><![CDATA[文章目录1. 基本概念1.1. 进程与线程1.1.1. 二者概念1.1.2. 二者区别1.2. 并行与并发2. 线程2.1. 线程运行的原理2.1.1. 栈与栈帧2.1.2. 线程上下文切换2.2. 创建线程2.2.1. 直接创建 Thread2.2.2. 结合 Runnable2.2.3. 结合 FutureTask2.3. 常见方法2.3.1. start() 与 run()2.3.2. sleep() 与 yield()2.3.3. join()2.3.4. interrupt()2.4. 终止线程-]]></description><category></category></item><item><title><![CDATA[【Java进阶笔记】运行期优化（即时编译、反射优化）]]></title><link>https://blog.youkuaiyun.com/ROX0008/article/details/114462102</link><guid>https://blog.youkuaiyun.com/ROX0008/article/details/114462102</guid><author>ROX0008</author><pubDate>Sat, 06 Mar 2021 23:02:50 +0800</pubDate><description><![CDATA[文章目录1. 即时编译1.1. 分层编译1.2. 方法内联2. 反射优化


1. 即时编译
1.1. 分层编译
JVM 的执行状态分为5个层次：

0层，解释执行（Interpreter）。
1层，使用 C1 即时编译器编译执行（不带profiling）。
2层，使佣 C1 即时编译器编译执行（带基本的profiling）。
3层，使用 C1 即时编译器编译执行（带完全的profiling）。
4层，使用 C2 即时编译器编译执行。


profiling 是指在运行过程中收集一些程序执行状态的数据， 例]]></description><category></category></item></channel></rss>