设备安装150个应用后,开机耗时增加7s,主要是PMS扫描/data/app,耗时6.5s。

分析发现,主要耗时在

  • scanPackageNewLI 解析apk文件
  • commitReconciledScanResultLocked 将解析到的组件添加到PMS

backtrace如下:

frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
scanDirTracedLI|--> scanDirLIfor ()|--> addForInitLI|--> scanPackageNewLI|--> commitReconciledScanResultLocked

scanPackageNewLI主要是读取解析apk文件,优化空间不大。进一步分析commitReconciledScanResultLocked

commitReconciledScanResultLocked|--> commitPackageSettings|--> ComponentResolver.addAllComponents|--> addActivitiesLocked|--> ActivityIntentResolver.addActivity|--> mActivities.put(a.getComponentName(), a)

mActivities是ArrayMap,安装140个应用后超过40000个元素,开机过程put总耗时2500ms。
ArrayMap是用Array实现的map,比HashMap节省内存,但是牺牲了性能,主要原因是每次插入、删除元素时都会对整个数组使用二分查找。

如果是保存几百个元素时,性能差距不超过50%。
新机开机后,mActivities元素也有5000个,所以不适合用ArrayMap。
将mActivities类型改为HashMap后,安装150个应用后put总耗时126ms,开机耗时减少2500ms。

Android设备安装150个应用后开机耗时分析优化相关推荐

  1. 升级后开机就提示“android.process.acore”停止执行 --分析 解决方式

    OTA升级的,升级引发的全部问题都是能够解释的,有的能解决,有的不能解决. 一个项目报了这个问题. 升级后开机就提示"android.process.acore"停止执行 抓取 a ...

  2. Android开机时长优化

    文章目录 一.背景说明 二.开机流程介绍 三.分析方法&工具 3.1 手动秒表计时 3.2 bootchart 3.2.1 生成log文件 3.2.2 生成bootchart.png 3.2. ...

  3. Android开机时间分析

    一. 关于本篇博文 该文档简单主要描述了如何找出开机各个阶段耗时情况,以及对开机各个阶段的分析方法和如何优化开机时间,减少耗时.便于读者可以通过此文档了解开机时间的各个阶段的耗时情况. 二.开机各阶段 ...

  4. android 耗时分析,启动耗时分析(四)-具体方法耗时分析

    原创文章,转载请注明出处,多谢! 如果cpu频率.调度 和 compiler filter都一一排除了,没问题.那接下来就看是否有具体方法耗时. 一.常用的分析手段: 1.systrace 这里可按s ...

  5. android 录音的格式转换,Android仿微信录音功能(录音后的raw文件转mp3文件)

    现在很多时候需要用到录音,然后如果我们的App是ios和android两端的话,就要考虑录音的文件在两端都能使用,这个时候就需要适配,两端的录音文件都要是mp3文件,这样才能保证两边都能播放. 针对这 ...

  6. (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题

    完美解决 Android WebView 文本框获取焦点后自动放大问题 前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本 ...

  7. 完美解决 Android WebView 文本框获取焦点后自动放大问题

    前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本框聚焦时,网页面会放大(他们用三星手机测试的) 网上查了好久参考他的方法 ...

  8. Android动画之前先闪一下,开机动画(闪动的ANDROID字样的动画图片)

    开机动画(闪动的ANDROID字样的动画图片) Android 的系统登录动画相仿于Windows系统的滚动条,是由前景和背景两张PNG图片构成,这两张图片存在于/system/framework / ...

  9. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

最新文章

  1. 实例1、查询数据(多级组织)
  2. ecplise 下的.class .project .setting 文件介绍
  3. 图像拼接 Image-based only, no GPS/IMU data
  4. PHP闭包(Closure)初探
  5. hbase完整分布式集群搭建
  6. 解决MATLAB不能设置为.m文件默认打开方式
  7. 晚上答辩的理论知识准备
  8. 机器学习知识总结系列- 模型评估(1-2)
  9. 容量法和库仑法的异同点_卡尔费休滴定仪容量法与库仑法有什么区别
  10. 深度学习实践指南(二)—— 符号编程
  11. YOLO系列专题——YOLOv3理论篇
  12. jquery实现app开发闹钟功能_商城app开发价格及功能列表
  13. 乐优商城遇到的坑(四)之前台门户系统之Search.html
  14. 显色指数(CRI)计算软件-升级版可视化界面这个人大家自己斟酌人品
  15. 360手机:360N6Lite Twrp、Root、Magisk教程
  16. 视频有水印不用怕,一键轻松解析视频水印,高清画质!
  17. 问题:TypeError: Descriptors cannot not be created directly.解决方法
  18. 【ROS入门教程】---- 01 ROS介绍
  19. C#经常用到的编程词汇
  20. 陪女朋友逛街花了一块钱,真心痛! 笑死我了

热门文章

  1. 鲸探发布点评:7月26日发售
  2. 如何使用Chrome直接编辑前端代码
  3. CCS graph功能
  4. web方式的mysql管理工具
  5. C++中txt文件的读取和写入
  6. 操作系统安全---实验三:Windows7操作系统安全
  7. Linux虚拟机启用时,出现:‘VMware虚拟机中出现无法将(系统文件路径)文件当做CD-ROM映像进行连接。
  8. VMware Workstation 和 Device/Credential Guard 不兼容
  9. 绿盟科技 linux漏洞,绿盟科技发布LINUX内核本地提权漏洞技术分析与防护方案
  10. 2020Java初级面试题一Web+SringMVC