Android 性能优化 -- 布局优化

布局对 Android 性能的影响就是影响页面的测量和绘制时间。 对布局的优化,也主要包括以下几个方面进行 选择合适的布局类型 减少布局文件的层级,层级越少, Android 绘制的工作量越少,那么程序的性能自然越高 减少测量和绘制时间, 提高复用性 选择合适的布局类型 简单界面 使用 LinearLayout 和 FrameLayout 复杂界面 使用 ConstraintLayout LinearLayout 和 FrameLay...

阅读更多

扫盲系列 - JVM 类加载器 ClassLoader

Java 中的类何时被加载器加载 在 Java 程序启动的时候,并不会一次性加载程序中所有的 .class 文件,而是在程序的运行过程中,动态地加载相应的类到内存中。通常情况下,Java 程序中的 .class 文件会在以下 2 种情况下被 ClassLoader 主动加载到内存中: 调用类构造器 调用类中的静态(static)变量或者静态方法 java 中的classloader 主要包括 启动类加载器 BootstrapClassLoa...

阅读更多

扫盲系列 - GC 算法

JVM 常见的 GC 算法: 标记清除算法,复制算法,标记整理算法,分代收集算法和火车算法 标记清除算法 从”GC Roots”集合开始,将内存整个遍历一次,保留所有可以被 GC Roots 直接或间接引用到的对象,而剩下的对象都当作垃圾对待并回收,过程分两步。 Mark 标记阶段:找到内存中的所有 GC Root 对象,只要是和 GC Root 对象直接或者间接相连则标记为灰色(也就是存活对象),否则标记为黑色(也就是垃圾对象)。 weep 清除阶段:...

阅读更多

View 的绘制 - draw 流程, invalidate 流程 以及 requestLayout 流程

View的 draw 流程 View 的 draw 过程遵循如下几步 绘制背景 drawBackground(); 绘制自己 onDraw(); 如果是 ViewGroup 则绘制子 View , dispatchDraw(); 绘制装饰(滚动条)和前景, onDrawForeground(); View 绘制过程的传递是通过 dispatchDraw() 来实现的, dispatchDraw() 会遍历调用所有子元素的的...

阅读更多

View 的绘制 - Layout 流程

Layout 作用就是 ViewGroup 用来确定子元素的位置。当 ViewGroup 的位置确定后,他会在 onLayout() 中遍历所有子元素并调用其 layout() 方法,在 layout() 方法中执行我们熟悉的 onLayout() 方法。 子 View 具体的 layout 的位置都是相对于父容器而言的, view 的 layout 过程同 Measure 同理,也是从顶级 View 开始,递归的完成整个控件树的布局操作 经过前面的测量,控...

阅读更多

View 的绘制 - Measure 流程

在说 Measure 过程之前,需要解释几个概念。 MeasureSpec 和 SpecMode MeasureSpec MeasureSpec很大程度上决定了 View 的尺寸规格,之所以很大程度上,是因为这个过程还受到父容器的影响,在测量过程中,系统会将 View 的 LayoutParams ,根据父容器的所施加的规则转换成对应的 MeasureSpce ,然后再根据这个 MeasureSpce 测量出 View 的宽高。 MeasureSpce...

阅读更多

View 的绘制 - 概览

前言 Android 的屏幕刷新中涉及到最重要的三个概念 CPU : 执行应用层的measure,layout,draw等操作。绘制完成后将数据提交给GPU GPU : 进一步处理数据,并将数据缓存起来 屏幕 : 由一个个像素点组成,以固定的频率(16.6ms,即1秒60帧)从缓存区中取出来数据来填充像素点 总结一句话就是:CPU 绘制后提交数据,GPU进一步处理和缓存数据,最后屏幕从缓冲区中读取数据并显示。 ViewRootImpl View ...

阅读更多

Android 线程池

线程池的好处: 重用线程池中的线程,避免因为线程的创建和消耗带来的性能开销 能有效的控制线程池的最大并发数,避免大量的线程之间因为互相抢占系统资源而导致的阻塞现象 能够对线程进行简单的管理,并提供定时执行依据指定间隔循环执行等功能 ThreadPoolExecutor ExecutorService 是最初的线程池接口, ThreadPoolExecutor 是线程池的实现类。 ThreadPoolExecutor 继承 AbstractExec...

阅读更多