Potato
Potato copied to clipboard
Read the fucking source code for the Android interview
# Android Version Diff [TOC] ## Android 5 * Material Design:设置 Z 维度实现阴影,提供 Acttivity 转场效果,共享视觉元素,提供水波纹动画。新增 渲染线程 的系统管理处理线程,即使是在主 UI线程出现延迟也可保证动画流畅。 * Android 在新的 ART 运行时上独占内存,使用预先编译(AOT)代码,即时编译(JIT)代码和解释代码。 * 通知:可在锁定屏幕显示各种通知。 ## Android 6 * 运行时权限:提供运行时管理权限的能力。可以为所安装的各个应用分别授予权限和撤销权限。...
# JMM, JVM, Java ClassLoader ## JVM 内存结构 Java 代码时运行在 jvm 虚拟机上,而虚拟机在执行 java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途。其中有些区域随着虚拟机的启动而存在,而有些区域则是依赖用户线程启动和结束而建立和销毁。  上面就是 JVM 运行时内存区域的结构。 ## Java 内存模型 在前面的 JVM 内存结构中,Java 堆和方法区是多个线程共享的数据区域。也就意味着多个线程可能操作保存在方法区中的同一个数据。这也就是常说的 Java的线程间通过共享内存进行通信。 Java 的多线程之间是通过共享内存进行通信的,而由于采用共享内存进行通信,在通信过程中会存在一系列如可见性、原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM 定义了一些语法集,这些语法集映射到Java语言中就是 volatile、synchronized...
GC And Algorithm Table of Contents GC And AlgorithmJVM 内存管理GC 机制查找算法四个引用内存分区GC 算法垃圾收集器串行收集器(Serial GC)ParNew GCParallel Scavenge GCCMS (Concurrent Mark Sweep)收集器….总结 这篇文章讲述 java 的垃圾回收机制,和之前的文章有密切的联系。 JMM, JVM, Java Class Model 在平常的开发中,如果不了解内存回收机制的原理,可能会引发内存泄漏,频繁 GC。导致应用卡顿,甚至崩溃等。 JVM...
# Handler:Android Message Model [TOC] 依旧由 ActivityThread 的 main() 函数讲起。该函数作为应用程序运行的初始函数,在其中做了很多的初始化工作,比如 handler,这篇文章就从源码角度分析 Android 中的通信机制, Handler。 ```java // ActivityThread.java public static void main(String[] args) { // UI 线程初始化 loop Looper.prepareMainLooper(); if (sMainThreadHandler...
# Android SurfaceView And TextureView [TOC] ## SurfaceView 继承自 View,但不同的是有自己的 Surface, 在 WMS 中有对应的 WindowState。在 SurfaceFlinger 中有 Layer。 一般的 Activity 包含的多个 View 会组成 View hierachy 的树形结构,只有最顶层的 DecorView,也即跟节点视图,才是对 WMS 可见。这个DecorView在WMS中有一个对应的WindowState。相应地,在SF中对应的Layer。而SurfaceView自带一个Surface,这个Surface在WMS中有自己对应的WindowState,在SF中也会有自己的Layer。虽然在App端它仍在View hierachy中,但在Server端(WMS和SF)中,它与宿主窗口是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染时可以有自己的GL...
# View: working process [TOC] 在上一篇文章[Activity: Lifecycle and ActivityThread](https://github.com/yunshuipiao/Potato/issues/22) 分析了 Activity 启动后执行生命周期方法的基础上,走到了 performTraversals() 方法,这篇文章由此开始,讲解 View 的工作流程。 ```java // ViewRootImpl.java // 这个函数内容很多,最重要的就是 View 的 Measure, Layout 和 Draw 三个过程。 private void...
# Android Animation Summary [TOC] 动画作为 Android 中提升用户体验的一部分,也是非常重要的模块。这篇文章总结 Android 中与动画使用相关的部分。 ## 概述 Android 中的动画分为三大类 * View 动画(补间动画和帧动画) * Transition 过渡动画 * 属性动画 动画的本质是将作用对象的属性值在一段时间内进行缓慢改变,将每一个小的时间片对应的属性值进行修改并不断重绘制,形成动画 ## View 动画 主要分为四种, | 名称 |...
# Android Memory Optimization [TOC] 这篇文章来讲解 Android 中涉及的内存优化, 尤其是 内存泄漏。 ## 基础知识 1. 通过 shell 命令可以分析内存状况。 * dvm 最大可用内存: `adb shell getprop | grep dalvik.vm.heapsize` * 单个程序限制最大可用内存: `adb shell getprop...
# ActivityThread: app launche flow [TOC] ## APP 的启动 简单叙述 这里先借用一张图展示整个流程。  上面有很多的名词概念,具体了解需要下载源码编译去看,因为这里做个简单解释 ### Zygote 进程 在 Android 系统中,Zygote 是一个进程的名字。因为 Android 是基于 Linux 系统的,当手机开机的时候,Linux 的内核加载完成之后就会启动一个叫 init 的进程,后面所有的进程都有该进程 fork 而来,就包括 Zygote...