Android系统优化实操总结

内核优化

DTS优化

删除不需要的节点

内核编译配置优化

参考《kernel .config优化》 https://blog.csdn.net/mcsbary/article/details/90264591

配置、服务、framework优化

native service优化

开机启动后,查看/目录下的rc文件,确定不需要的服务,然后在源码中删除,再编译系统,验证系统的稳定性和在/目录下的rc文件中确认要删除的服务已不再

注意: 一些服务和其他模块有关联性,删除一个服务可能需要在其他模块中同步删除对已删除服务的依赖。

类预加载优化

预加载类的作用

  1. 减少内存的占用。当一个类被多个进程使用时,预加载可以共享一份加载,否则每个进程会加载一份
  2. 加速应用的启动。当应用启动时需要的类都已加载内存,app启动会快一些,app需要的类很多时,效果更明显

因此,预加载优化是一个双刃剑,优化的多了,开机速度会增大,但是会影响一些依赖已删除类的app的启动,且每一个app都会加载一份已删除的类,增加内存占用。

当我们使用Android开发的产品,仅在特定的场景使用,一些类就不需要加载,如蓝牙等模块。优化预加载衡量好性能的需求。

步骤如下:

  1. 编辑frameworks/base/preloaded-classes文件,删除不需要预加载的类
  2. 编译代码烧录验证,有些核心类被删除后,系统无法正常启动

除了直接修改预加载类文件,还可以修改生成预加载类的代码,重新生成预加载类文件

优秀博客:https://blog.csdn.net/u014029448/article/details/81129382

资源预加载优化

类和资源预加载优化:https://blog.csdn.net/jinron10/article/details/89315392
android启动速度优化:https://blog.csdn.net/chenyong19870904/article/details/12912093
Android开机速度优化简单回顾:https://blog.csdn.net/freshui/article/details/53700771

一个开源项目:
https://gitee.com/luckybilly/PreLoader

字库优化

参考《内存优化–减少字库缓存》https://blog.csdn.net/mcsbary/article/details/89363082

内存优化

预加载优化

预加载优化和内存优化存在一定的冲突,选在了快速启动,开机后进程加载的资源就会多份。需要合理衡量需求。

应用合理布局

合理设计布局

防止内存泄漏

java层:不合理引用导致内存泄漏
C++层:分配内存没有释放

这是比较常见的两种内存泄漏,都可以通过煲机,分析PSS、RSS等分析出来内存是否泄漏。在长时间,大数据下,一点泄漏会被放大。

使用内存压缩

内存压缩,增加了内存的使用率,但是一定成都上增加了kernel的负载,在cpu资源方面的占用会有一定成都的增加,如果cpu性能不是特别强劲,会影响运行性能,影响体验感。

该策略或许可以在高性能cpu配低内存情况下使用,不影响性能,还可以节省内存。
关闭内存压缩

  1. 删除分区表中压缩缓存分区
  2. 关闭kernel中ZRAM配置
使用Android ION分配内存

在Android 7.1已使用,在kernel中关闭ION,开机系统会起不来

关闭jit

在Android运行时,jit会对运行性能,根据实际运行情况,做一些优化。关闭git在一定成都上节省内存,在性能不强劲的cpu下,性能会有很大影响

配置系统使用low_mem

配置系统属性使用low_mem,会关闭系统一些feature

ro.config.low_ram=true
定时释放kernel缓存

linux 临时释放缓存:https://blog.csdn.net/killvoon/article/details/73557939
该策略,在释放缓存的瞬间,对系统性能有一定的影响,影响有限,可以接受

lowMemKiller

打开kernel的lowMemKiller机制

Android lmkd:https://blog.csdn.net/mcsbary/article/details/89323232

猜你喜欢

转载自blog.csdn.net/mcsbary/article/details/90379921