MTK(Android)开关机、重启时间优化

MTK(Android)开关机、重启时间优化本文主要探讨了 MTKAndroid 设备的开关机时间优化方法 包括开机时 Zygote 预加载优化 开机动画流程选择 减少不必要的服务加载 kernelinit 时间优化 dex2oat 编译影响分析以及关机时间优化等

开关机、重启时间优化:

开机性能优化:是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义;
有些产品设计开机动画非常酷炫,动画图片过多、高帧率会影响开机速度,这时就需要看是开机速度优先还是体验优先;

[SOLUTION]

1.zygote,预加载class、resources;加载的多了,会影响开机时间;
/sdcard/mtklog/bootprof
12450.516490 : 860-system_server : Android:PMS_READY
13136.536031 : 506-main : Zygote:Preload 4715 classes in 495ms
13263.841416 : 506-main : Zygote:Preload 64 obtain resources in 42ms
13271.525031 : 506-main : Zygote:Preload 41 resources in 6ms
13639.574263 : 860-system_server : AMS:systemReady
13645.305493 : 860-system_server : AMS:AMS_READY

/frameworks/base/config/preloaded-classes,因为少加载类会影响APP启动速度,开机过程会涉及到APP启动,此地没有优化空间;

/frameworks/base/core/res/会被打包成:framework-res.apk,确保没有冗余的资源图片,可以挨个检查图片、XML是否在系统中有用到;

2.开机动画进程bootanimation或者mtkbootanimation,走android比走movie流程占用内存资源要少些,开机会快些,测试大概快上百毫秒;
开机动画分两种情况:
(1)播放mp3,需要等到mp3播放完动画才能退出,开机才能完成;所以mp3文件不能过长,最好不要超过system_server启动时间;
system_server启动时间查看如下:
/sdcard/mtklog/bootprof
10367.726870 : 860-system_server : Android:SysServerInit_START
……
14137.026648 : 860-system_server : Android:SysServerInit_END

(2)不播放mp3,不会影响开机时间;

bootanimation.zip中图片越少越好;

不建议更改,修改风险较大,除非对开机速度有特别严苛的要求才修改:
/frameworks/base/services/java/com/android/server/SystemServer.java

比如:DropBoxManagerService和调试相关,可以异步加载或者直接阉割掉:
比如:PinnerService没有配置相关则可以去除;
其他Service可以挨个排查;

system_server特定的服务导致开机变慢,比如:指纹系统;
非必要的服务可以放在system_server进程外启动;

5.kernel init 时间长,需要先看一下客户的版本上init.rc文件相对Driveronly版本是否有添加新的init,这些是否都是必须添加的。
在uartlog 中,需要查关键字-----[ cut here ]------------ ,找到在kernel init 过程中,频繁打出的这些call stack,看这些call stack,排查一下贵司所客制化的点。

6.在uartlog中排查驱动设备初始化是否有完成或延时较长

7.因为对apk进行dex2oat导致的开机慢问题确认
7.1、如果是刷机后第一次:
可以在sys_log.boot里面check 这两个log的时间,如果时间较长的话,就会有相关的dex的耗时,然后可以打开DEBUG_DEXOPT的log,进一步check是哪个apk在进行dex2oat
3364 01-01 00:01:17.923181 1008 1008 I SystemServer: UpdatePackagesIfNeeded

4825 01-01 00:01:28.833169 1008 1008 I SystemServer: PerformFstrimIfNeeded

7.2、非第一次开机log:
bootprof文件中包含PMS:performDexOpt,说明在编译时没有打开dex2oat选项;
/sdcard/mtklog/mobile/…/bootprof
49643.453733 : 777-system_server : Android:PMS_READY
50662.038197 : 777-system_server : PMS:performDexOpt:com.mediatek.ims
50958.422582 : 434-main : Zygote:Preload 4715 classes in 957ms
51027.330659 : 777-system_server : PMS:performDexOpt:com.google.android.ext.services
51175.849890 : 434-main : Zygote:Preload 64 obtain resources in 89ms
51191.674429 : 434-main : Zygote:Preload 41 resources in 15ms
52011.623200 : 777-system_server : PMS:performDexOpt:com.android.providers.telephony
53090.475818 : 777-system_server : PMS:performDexOpt:com.valmul.defcontainer
53500.331742 : 777-system_server : PMS:performDexOpt:com.google.android.ext.shared
53759.386897 : 777-system_server : PMS:performDexOpt:com.figoglobal.gpsinitialization
55253.543054 : 777-system_server : PMS:performDexOpt:com.android.mms.service
55263.628131 : 777-system_server : PMS:performDexOpt:com.mediatek.wfo.impl
55270.579900 : 777-sy

编程小号
上一篇 2025-01-11 07:01
下一篇 2025-01-12 14:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/109182.html