Android设备安装150个应用后开机耗时分析优化
设备安装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个应用后开机耗时分析优化相关推荐
- 升级后开机就提示“android.process.acore”停止执行 --分析 解决方式
OTA升级的,升级引发的全部问题都是能够解释的,有的能解决,有的不能解决. 一个项目报了这个问题. 升级后开机就提示"android.process.acore"停止执行 抓取 a ...
- Android开机时长优化
文章目录 一.背景说明 二.开机流程介绍 三.分析方法&工具 3.1 手动秒表计时 3.2 bootchart 3.2.1 生成log文件 3.2.2 生成bootchart.png 3.2. ...
- Android开机时间分析
一. 关于本篇博文 该文档简单主要描述了如何找出开机各个阶段耗时情况,以及对开机各个阶段的分析方法和如何优化开机时间,减少耗时.便于读者可以通过此文档了解开机时间的各个阶段的耗时情况. 二.开机各阶段 ...
- android 耗时分析,启动耗时分析(四)-具体方法耗时分析
原创文章,转载请注明出处,多谢! 如果cpu频率.调度 和 compiler filter都一一排除了,没问题.那接下来就看是否有具体方法耗时. 一.常用的分析手段: 1.systrace 这里可按s ...
- android 录音的格式转换,Android仿微信录音功能(录音后的raw文件转mp3文件)
现在很多时候需要用到录音,然后如果我们的App是ios和android两端的话,就要考虑录音的文件在两端都能使用,这个时候就需要适配,两端的录音文件都要是mp3文件,这样才能保证两边都能播放. 针对这 ...
- (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题
完美解决 Android WebView 文本框获取焦点后自动放大问题 前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本 ...
- 完美解决 Android WebView 文本框获取焦点后自动放大问题
前几天在写一个项目时,要求在项目中嵌入一个WebView 本来很快就完成了,测试也没有问题.但发给新加坡时,他们测试都会出现文本框聚焦时,网页面会放大(他们用三星手机测试的) 网上查了好久参考他的方法 ...
- Android动画之前先闪一下,开机动画(闪动的ANDROID字样的动画图片)
开机动画(闪动的ANDROID字样的动画图片) Android 的系统登录动画相仿于Windows系统的滚动条,是由前景和背景两张PNG图片构成,这两张图片存在于/system/framework / ...
- android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序
android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...
最新文章
- 实例1、查询数据(多级组织)
- ecplise 下的.class .project .setting 文件介绍
- 图像拼接 Image-based only, no GPS/IMU data
- PHP闭包(Closure)初探
- hbase完整分布式集群搭建
- 解决MATLAB不能设置为.m文件默认打开方式
- 晚上答辩的理论知识准备
- 机器学习知识总结系列- 模型评估(1-2)
- 容量法和库仑法的异同点_卡尔费休滴定仪容量法与库仑法有什么区别
- 深度学习实践指南(二)—— 符号编程
- YOLO系列专题——YOLOv3理论篇
- jquery实现app开发闹钟功能_商城app开发价格及功能列表
- 乐优商城遇到的坑(四)之前台门户系统之Search.html
- 显色指数(CRI)计算软件-升级版可视化界面这个人大家自己斟酌人品
- 360手机:360N6Lite Twrp、Root、Magisk教程
- 视频有水印不用怕,一键轻松解析视频水印,高清画质!
- 问题:TypeError: Descriptors cannot not be created directly.解决方法
- 【ROS入门教程】---- 01 ROS介绍
- C#经常用到的编程词汇
- 陪女朋友逛街花了一块钱,真心痛! 笑死我了
热门文章
- 鲸探发布点评:7月26日发售
- 如何使用Chrome直接编辑前端代码
- CCS graph功能
- web方式的mysql管理工具
- C++中txt文件的读取和写入
- 操作系统安全---实验三:Windows7操作系统安全
- Linux虚拟机启用时,出现:‘VMware虚拟机中出现无法将(系统文件路径)文件当做CD-ROM映像进行连接。
- VMware Workstation 和 Device/Credential Guard 不兼容
- 绿盟科技 linux漏洞,绿盟科技发布LINUX内核本地提权漏洞技术分析与防护方案
- 2020Java初级面试题一Web+SringMVC