本篇文章主要介绍 Android 开发中开关机 重启时间 部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. zygote,预加载class、resources

  2. 开机动画进程 bootanimation

  3. SystemServer.java 代码逻辑

  4. 非必要服务请放在system_server进程外启动

  5. kernel init 时间过长

  6. 排查驱动设备初始化是否完成

  7. apk dex2oat时间过长

  8. 尽量少把APP设置为persist

  9. 定频定核,调高CPU频率,会带来一定的功耗

  10. PackageManagerService 扫描apk 优化

  11. 关机时间优化

  12. 优化第三apk 后台服务

  13. 谷歌官方参考资料

欢迎关注微信公众号:程序员Android

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。

开机性能优化

开机性能是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义;

1.zygote,预加载class、resources

zygote预加载多了,会影响开机时间,所以需要优化预加载内容。

MTK 平台 开机时间信息保存在 /proc/bootprof下,或mtklog/mobilelog/Aplog下。

开机时间信息

<< /proc/bootprof >>:
----------------------------------------0       BOOT PROF (unit:msec)
----------------------------------------      1612        : preloader      1915        : lk (Start->Show logo: 981)
----------------------------------------        34.132076 : ON        88.563768 :    1-swapper/0       : initcall: of_init    17.915384ms       131.311461 :    1-swapper/0
......  38411.551244 :  325-Binder:300_1    : BOOT_Animation:END38411.595629 : OFF
----------------------------------------
================ END of FILE ===============

预加载Class

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

预加载Class

预加载资源

/frameworks/base/core/res/下的资源文件会被打包成 framework-res.apk

2.开机动画进程 bootanimation

开机动画保存在手机system/media下,开机动画要求图片越少越好,不宜占用过大的内存空间,否则系统会浪费在加载开机动画图片上,这样导致开机时间慢,就不好了。

两种开机动画

1.播放开机声音

开机动画需要等待开机铃声播放完,动画才能退出,开机才能完成;所以开机铃声的mp3文件不能过长,最好不要超过system_server启动时间;

system_server 启动时间

     23340.916362 :  727-system_server   : Android:SysServerInit_START24217.928364 :  727-system_server   : Android:PackageManagerService_Start....31891.278382 :  727-system_server   : Android:SysServerInit_END

2.不播放开机声音

不播放开机声音,不会影响开机时间,bootanimation.zip中图片越少越好。

3. SystemServer.java 代码逻辑

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

比如:DropBoxManagerService

PinnerService

其他Service可以挨个排查;

4. 非必要服务请放在system_server进程外启动

system_server 特定的服务导致开机变慢,比如:指纹系统;system_server进程外启动;

5. kernel init 时间过长

kernel init需要先看一下客户的版本上init.rc文件相对Driveronly版本是否有添加新的init,这些是否都是必须添加的。

uartlog 中,需要查关键字 cut here ,找到在kernel init过程中,频繁打出的这些call stack,看这些call stack,排查一下贵司所客制化的点。

6. 排查驱动设备初始化是否完成

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

比如之前驱动代码异常问题,耗时8s,这个有很大优化空间。

遇到问题举例

7. apk dex2oat时间过长

如果是刷机后第一次因为对apk进行dex2oat导致的开机慢:

bootprof文件中包含PMS:performDexOpt,说明在编译时没有打开dex2oat选项;/device/build目录下,修改下面的宏,具体下面3个宏的位置可以在代码中搜索一下:

build/core/dex_preopt.mk

WITH_DEXPREOPT := true WITH_DEXPREOPT_PIC := trueDONT_DEXPREOPT_PREBUILTS := false //或者注释掉

Log 举例:

     67720.299622 : 1211-system_server   : PMS:performDexOpt:com.mediatek.ims67727.107469 : 1211-system_server   : PMS:performDexOpt:com.google.android.ext.services67732.884007 : 1211-system_server   : PMS:performDexOpt:com.android.providers.telephony67740.281545 : 1211-system_server   : PMS:performDexOpt:com.micromaxinfo.coreupdater67750.098776 : 1211-system_server   : PMS:performDexOpt:com.touchtype.swiftkey82794.094658 : 1211-system_server   : PMS:performDexOpt:com.mediatek.fwk.plugin82798.845812 : 1211-system_server   : .......116880.481509 : 1211-system_server   : PMS:performDexOpt:com.android.keychain116884.277509 : 1211-system_server   : PMS:performDexOpt:com.android.chrome116901.748740 : 1211-system_server   : PMS:performDexOpt:com.android.gallery3d116909.980047 : 1211-system_server   : 126659.802071 : 1211-system_server   : PMS:performDexOpt:com.google.android.syncadapters.calendar126665.240840 : 1211-system_server   : PMS:performDexOpt:com.android.managedpr134272.287243 : 1211-system_server   : PMS:performDexOpt:com.jio.adc.embedded134581.037782 : 1211-system_server   : PMS:performDexOpt:com.android.wallpaperbackup134583.934936 : 1211-system_server   : PMS:performDexOpt:com.android.providers.blockednumber134589.891166 : 1211-system_server   : 137465.599866 : 1211-system_server   : PMS:performDexOpt:com.android.captiveportallogin

8. 尽量少把APP设置为persist

  1. 优化每一个有源码的persist APP;使他们启动尽可能快;

  • com.android.systemui(PersistAP)

  • com.mediatek.ims(PersistAP)

  • com.android.phone(PersistAP)

  • com.android.settings

  1. 精简apk包

(1)删除没有用到的,图片、资源文件、没有用到的 jar包文件、不需要使用的so文件;drawable-xxhdpi中的资源,那么可以在drawable包 重复的资源可以直接删除;values-da、values-fa这样的多语言支持资源都 可以删除;

  1. App 的onCreate方法中不要用耗时的代码片段。

  2. 修改app的启动模式

通过修改--compiler-filter为 speed、quick、speed-profile来提高apk的启动速度;speed 模式优化的类较多,这时优化后的vdex、odex的文件较大,应用启动过程包括映射apk文件的过程,文件偏大导致有一定的时间损耗;speed模式优化后,Java类执行更快;所以这个需要针对具体的应用多次验证,没有普适性;

9. 定频定核,调高CPU频率,会带来一定的功耗

6763的O1版本代码为例:/system/core/rootdir/init.rc

on early-init#mtk beginwrite /proc/ppm/policy/ut_fix_core_num "4 4"write /proc/ppm/policy/ut_fix_freq_idx "0 0"#mtk endon property:sys.boot_completed=1
bootchart stop#mtk beginwrite /proc/ppm/policy/ut_fix_core_num "-1 -1"write /proc/ppm/policy/ut_fix_freq_idx "-1 -1"#mtk end

10.PackageManagerService 扫描apk 优化

scanDirTracedLI

(1)减少预置APP的数量(对开机速度会有较为明显的提升);apk包;scan分区里面的apk并不一定能充分使用IO资源,尝试改为多线程异步scan;(部分手机厂商有做出此种修改,且效果较为明显,但修改需谨慎);apk包、有重复功能的apk移除(比如:我司代码默认包含 有计算器APP,如果贵司有自己单独的计算器APP则可以移除我司apk),这样既可以使系统有更大的剩余存储空间又可以减少scan的时间,加快开机;

11.关机时间优化

MTK6763为例:[ro.mediatek.version.branch]: [alps-mp-o1.mp1]1s(贵司可以自己测试找一个最优值),然后关机音频控制在1s(否则音频播放不完整),或者关机时不播放铃声,把这个值设置为10ms

/frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java

149 // Shutdown Animation150 private static final int MIN_SHUTDOWN_ANIMATION_PLAY_TIME = 1 * 1000;

12.优化第三apk 后台服务

关机时间长的另外一个原因有可能是后台应用乱跑;APP,在后台都在积极抢占CPU,在手机系统资源紧张时对系统的性能影响是非常大的;

手机使用过程中,适当的限制后台进程的数量,会一定程度提高系统性能和更快的关机;

还有些APP一直保持有1个像素的悬浮窗,使自己一直为可见进程,可见进程能更多的占用系统资源,手机系统可以增加悬浮窗的权限管控开关只有获取到了才允许悬浮,可以更加合理的非配系统资源。

13.谷歌官方参考资料

谷歌官方启动时间优化链接

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。期待您的关注,

如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。

欢迎关注微信公众号:程序员Android

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。

点击阅读原文,获取更多福利

Android手机开关机、重启时间优化相关推荐

  1. 手机开关机、重启时间优化方案

    极力推荐文章:欢迎收藏 Android 干货分享 本篇文章主要介绍 Android 开发中 开关机 重启时间 部分知识点,通过阅读本篇文章,您将收获以下内容: 一. zygote,预加载class.r ...

  2. Android系统优化(65)---MTK 平台开关机、重启时间优化

    开关机.重启时间优化   一.开关机.重启时间优化: 开机性能优化:是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义:有些产品设计开机动画非常酷炫,动画图片过多.高帧率会影响开机速 ...

  3. Android 系统性能优化(57)---MTK 平台开关机、重启时间优化

    MTK 平台开关机.重启时间优化  开关机.重启时间优化   开机性能优化:是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义:  有些产品设计开机动画非常酷炫,动画图片过多.高帧率 ...

  4. android 手机强制关机代码,安卓手机强制重启方法

    无论什么品牌和价位,一款手机拿到手总是难免出现这样那样的问题.而在这些纷杂不一的问题中,手机卡顿大概是困扰着大多数人的一个问题.手机使用一段时间后发生卡顿,慢性子的还等一等,碰上有急事或者急性子,直接 ...

  5. Android手机内存管理与性能优化

    Android手机内存管理与性能优化&JNI.NDK高级编程(JNI.Dalvik.内存监测) 课程分类:Android 适合人群:中级 课时数量:34小节课时 用到技术:Dalvik,DDM ...

  6. java实现手机开关机_Android实现关机与重启的几种方式(推荐)

    下面我们来探究Android如何实现关机,重启:在Android中这种操作往往需要管理员级别,或者root Android实现的方式如下几种: 默认的SDK并没有提供应用开发者直接的Android系统 ...

  7. Android快速监听手机是否关机/重启过

    Android注册静态BroadcastReceiver可以监听到开机/关机/重启的状态.但是,关机的广播有的时候收不到,开机的广播延时特别大,体验不是很好.所以可以根据SystemPropertie ...

  8. Android 实现开关机和重启的多种方式

    Android实现的方式如下几种: 默认的SDK并没有提供应用开发者直接的Android系统关机或重启的API接口,一般来讲,实现Android系统的关机或重启,需要较高的权限(系统权限甚至Root权 ...

  9. Android 自动开关机

    转自:cnblog,http://www.cnblogs.com/melaniedeng/archive/2012/02/16/2355066.html 关于android自动关机,网上有很多应用程序 ...

最新文章

  1. 厉害了黑科技,动态安全下的防拖库原来可以这么简单!
  2. 直面Java第45期
  3. 一文读懂最强中文NLP预训练模型ERNIE
  4. rails 两表关联查询_Rails中的单表继承与多态关联:找到适合您的方法
  5. 带你自学Python系列(十四):Python函数的用法(四)
  6. php去掉关联数组,大家都应该掌握的PHP关联数组使用技巧
  7. LTE物理传输资源(2)-频带、信道带宽和频点号EARFCN
  8. Python学习笔记(三)Python安装及设置环境变量
  9. 判断目录下的文件是否为图片
  10. 进不去系统,解决办法
  11. 时间字符串以及时间戳解析
  12. 通过collect埋点_通过Collect UI查找每日界面设计灵感
  13. Visual Studio 2017中找不到商业智能(Business Intelligence)模块 |
  14. 电器元件——LM7805
  15. 《C++ 黑客编程揭秘与防范(第2版)》目录—导读
  16. 【优化算法】多目标灰狼优化算法(MOGWO)【含Matlab源码 099期】
  17. 2007年中考语文模拟试题1
  18. linux安装Aria2和部署AriaNg Web服务
  19. 使用opencv将16位深度图转灰度图
  20. mye连接mysql数据库_myeclipse连接数据库

热门文章

  1. 保研经历--七月夏令营
  2. 网络安全SSRF漏洞检测
  3. 狂神说SpringCloud学习笔记(附带源码和笔记)
  4. ubuntu18.04为浏览器安装flash
  5. 关于Linux中so显式链接(dlopen)找不到函数符号地址的问题
  6. 算法 11.纸牌游戏
  7. 选股方法之:量比和换手率(转载)
  8. matlab生成拟圆柱面
  9. python 速度矢量表达式_一文总结词向量的计算、评估与优化
  10. 医疗信息化领域的软件设计模式