一、 ART运行环境优化
ART (Android Runtime) 已经是 Android 的默认运行时环境,它在 11 版本中得到了优化。通过使用图像化功能来改进 ART 垃圾收集器,从而大大减少了系统操作,在更高的频率下执行垃圾收集。ART 还使用了参数化编译策略,在首次启动时生成代码,从而改善应用启动所需的时间,同时还减少了对 CPU 和系统资源的负载。
// 通过设置参数改进编译策略
dex2oat --compiler-filter=$MODE
二、新的图形和视频编解码器
Android 11 对现有的图形和视频编解码器的性能进行了优化。其中,VP9 视频编解码器的新版本提高了其在 Android 上的实现效率,这也让视频播放大幅度减少了 CPU 使用率。在图形方面,ImageDecoder API 的增强使应用能够更有效地处理需要瞬时解码的格式。
//使用ImageDecoder解码Bitmap
ImageDecoder.createSource(context.getContentResolver(), uri).decodeBitmap()
三、新的磁盘 I/O 具有更好的安全性和性能
Android 11 新增了一种名为 O_DIRECT 的选项,可用于对非缓存 I/O 请求所执行的磁盘访问进行优化。在使用此选项时,应用程序可以使用更少的系统资源来传输数据,同时也降低了安全性风险,因为 O_DIRECT 不使用系统缓存。此外,Android 11 还支持 FS-verity 签名驱动程序,该程序可以确保只有那些通过 VFS API(Virtual File System API)签名的文件才能被访问,这进一步提高了文件的安全性。
//使用 O_DIRECT 进行非缓存 I/O
int fd = open("/path/to/my/file", O_RDWR | O_DIRECT);
四、内存优化
Android 11 中的内存优化可以让应用程序更有效地使用系统资源,从而提高应用程序的性能。例如,系统会使用 LMKD(Low Memory Killer Daemon)控制进程的内存使用情况,LPD(Low Power Daemon)则使用进程状态来优化应用程序的电池使用效率。此外,Android 11 还增加了机架感知内存分配,可以在多个节点之间动态地分配内存,从而改进 Android 在集群环境中的性能,提高预测性和稳定性。
//使用机架感知内存分配
MemoryAllocator alloc = MemoryAllocator.getInstance(
MemoryTag.NATIVE_DEFAULT,
MemoryMode.STANDARD);
ByteBuffer byteBuffer = alloc.allocate(1024);
五、Wi-Fi 和网络性能
Android 11 对 Wi-Fi 和网络连接进行了优化,以改进相应的性能。其中,应用程序可以利用 Android 11 中的网络指示器来获得所有相关连接的信息,并使用新的 API 以快速启动网络。此外,通过将管理电源和随意的网络流量分离,Android 11 还可以提高 Wi-Fi 的效率,从而提供更高的速度和更好的性能。
//启动一个Wi-Fi网络
WifiNetworkSpecifier.Builder builder =
new WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(password);
NetworkRequest request =
new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(specifier)
.build();
NetworkCallbacks callbacks = ...;
ConnectivityManager connectivityManager =
getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(request, callbacks);