Android性能优化专栏
目录
10.高性能图片优化方案
06.不同版本对Bitmap管理
Bitmap 在内存中的组成部分,在任何系统版本中都会存在以下 3 个部分:
- Java Bitmap 对象:位于 Java 堆,即我们熟悉的 android.graphics.Bitmap.java ;
- Native Bitmap 对象:位于 Native 堆,以 Bitmap.cpp 为代表,除此之外还包括与 Skia 引擎相关的 SkBitmap、SkBitmapInfo 等一系列对象;
- 图片像素数据:图片解码后得到的像素数据。
Bitmap 内存回收,谷歌设计两种回收机制:
- Finalizer 机制,提供对象回收之前释放资源时机
- 引用机制,类似做了一个弱引用,虚引用机制,能够利用引用类型感知Java对象回收
Android 8.0 之后Bitmap创建过程分析
- 步骤 1 - 创建解码器:创建一个面向输入流的解码器;
- 步骤 2 - 创建内存分配器:创建像素数据的内存分配器,默认使用 Native Heap 内存分配器(HeapAllocator),如果使用了 inBitmap 复用会采用其他分配器;
- 步骤 3 - 预分配像素数据内存:使用内存分配器预分配内存,并创建 Native Bitmap 对象;
- 步骤 4 - 解码:使用解码器解码,并写入到预分配内存;
- 步骤 5 - 返回 Java Bitmap 对象:创建 Java Bitmap 对象,并包装了指向 Native Bitmap 的指针,返回到 Java 层。
16.App启动优化实践
4.7 启动白屏说明
问题说明:Android启动白屏/黑屏(即使给启动activity设置布局也照样存在),主要是给App设置style样式导致。这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。主要是app启动——Preview Window(也称为预览窗口)——启动页,预览窗口导致bug!
解决办法:1.给当前启动页添加一个有背景的style样式,windowBackground就是即将展示的preview window;2.禁止加载Preview。