分享7年Android经验:真的有弄懂过性能优化吗?

dex2oat配置方法及优化指南 在 Android 系统中,dex2oat 的配置和开关调整涉及多个层面,包括编译模式选择、系统属性设置、ROM 预编译优化等。LOCAL_DEX_PREOPT:在应用级 `Android.mk` 中设置是否预编译(如 LOCAL_DEX_PREOPT := false)。WITH_DEXPREOPT:开启全局预编译(默认开启),显著加快首次开机速度,但增大 system 分区。-quicken:快速编译(最低优化),安装快但运行时性能一般,适用于低端设备或调试场景。 阅读详情

我们常说的性能通常包括如下几个方面

1.应用的启动速度

这个无论是基于用户体验的角度还是基于产品 宣传的角度这个越来越受到主流厂商的重视:

a.基于用户体验的角度,这一点不难理解,随着手机硬件的不断升级,用户也是越来越没耐性,他们不想等,也就说当用户点击某个应用,就希望应用的操作界面立马呈现出来!
b.基于产品宣传的角度:由于应用的启动速度是能够非常直观呈现,因此常常被很多测评网站拿来对比!

2. 开/关机速度(包括恢复出厂设置速度)

3. 流畅度:

流畅度分普通场景的流畅度包括:滑动的流畅度、页面切换的流畅度;
游戏场景的流畅度:触屏是否跟手、FPS是否稳定、网络是否稳定;由于目前手机性能越来越好,同时手机游戏越来越火,特别是王者荣耀、吃鸡类游戏的持续火爆。使得各个厂商把游戏的流畅度提到战略高度,甚至出了的专门的游戏手机如:NUBIA的红魔手机,小米的黑鲨手机,有些厂商选择与游戏厂商合作,来对游戏进行深度优化如:oppo与王者荣耀团队的多核多线程优化,还有如vivo出了王者荣耀周年定制手机等等。

4.跑分:

跑分各人觉得产品宣传的角度远远大于用户体验。
但是由于线上这种“不服,就跑个分”这种氛围,使得各个厂商也必须对跑分进行所谓的优化。当然对于用户而言,跑分确实能反应出整个机器的硬件水平,但是如果跑分不是基于用户的基础使用体验为目的的话,个人觉得有一点"欺骗用户"的感觉,这里所说的基础体验就是指,厂商所谓的优化,不是针对跑分软件去进行优化,跑分高或者低只是一个水到渠成的结果,比如,我司手机滑动优化做得非常好,非常流畅,那么自然跑分软件中关于滑动流畅性这一块的分自然就高。预期对立的就是:

 

if(packagename.equals("antutu")){
       cpu最大频率跑
}

从技术层面看看这几个维度

应用启动速度:

应用启动速度对用户而言:是指从点击到第一个界面加载完毕的时间;

但是对于研发而言这里应该可以分为如下几个阶段:
a.点击即框架收到触屏的中断时间到launcher接收到input的事件;

b.launcher响应点击事件到应用绘制完第一帧;

c.从第一帧到页面加载完毕;a和b阶段是真正的系统的反应的时间,c阶段主要是动画的时间,不同厂商可能根据自己需求定义不同的动画时长。因此在对于应用启动的速度,尤其是热启动的时候一定要注意应用的启动动画时长。

分析应用启动常见思路如下:

前置条件(相同或者相近平台,这个是后面所有主题的前置条件):
首先要保证测试样机和竞品机器的安装的第三方应用是同一个版本,这个为排除不同版本的应用本身导致的启动速度上面差异。
应用最好都是重新安装的,因为对于第三方应用而言,非预制的应用,安装的时候android系统默认的compiler mode是android-N之前inerprter-only,android O开始就quicken。但是安装完一段时间后,系统会把它优化成speed-profile.这俩种模式对应用的启动速度影响比较大。

问题分析思路:

冷启动看看是否是真正的冷启动,因为有可能厂商为了某些应用的启动速度更快,而让这个应用的进程长驻。也有肯能是温启动,即:当你强行停止,应用进程又会立马起来。
热启动主要看动画时长是否一样
看看cpu/gpu的boost策略是否相同,如:启动过程中核心数、boost的所用的freq的大小,boost的时长、sched_boost的多0,1,2,还是3.
如果以上条件都一样,就抓systrace,看具体慢在哪一段

开/关机:开机可以看如下log

 

1
PBL/SBL/HYP/ LK boot loader
Bootloader time
2
Kernel boot up +
Initialize native daemons
boot_progress_start
3
Zygote class preloading
boot_progress_preload_start
boot_progress_preload_start
boot_progress_preload_end
boot_progress_preload_end
boot_progress_system_run
4
Package scanning
boot_progress_pms_start
boot_progress_pms_system_scan_start
boot_progress_pms_data_scan_start
boot_progress_pms_scan_end
boot_progress_pms_ready
5
Service initialization
boot_progress_ams_ready
6
UI/Apps start
boot_progress_enable_screen
Total boot up time
= Bootloader time (1) + Time from boot_progress_enable_screen

关机:可以通过 logcat |grep -i "shutdown",来看关机耗时。

游戏:游戏分俩种情况

游戏帧率稳定:但是就是感觉卡顿,或者是感觉任务移动困难,这个很有可能和触屏相关。这个时候最好能够用userdug的版本,进一步分析。一般有如下几种情况:

1.固件没有上报

2.固件上报了,但是被驱动过滤掉了

3.固件驱动都上报了,这个时候就要在框架进一步分析了

游戏帧率不稳定,这个又分下面俩种情况
1.游戏的某个场景,帧率一直不稳定,这个很有可能和cpu策略相关。

2.掉帧的这个场景,一开始稳定,但是发热后就不稳定了,这个应该就和温控策略相关,应该就是温控关核限频率导致的。

普通场景的流畅度:

这个就要对比分最好看看竞品是否卡顿,如果竞品流畅很多,就可以抓个systrace看看竞品机器的cpu策略是什么样的,同时检查oversrcoller boost,scroller boost是否生效。

如果遇到系统整体卡顿情况,分析思路如下:
1.检查是否处于低电状态,低电状况会触发BCL,如高通平台一般是10%,这个时候就会关闭所有大核,或者打核不跑任务。

2.检查是否发热,导致关核

3.用TOP命令看一下,是否有某些应用在疯狂的暂用cpu资源。

如果遇到插充电器(电脑)不卡,不插充电器卡的情况,可以尝试抓取离线的systrace来分析(高通平台):

1.使用手机连接上wifi

2.确保手机和PC网络可以互通(可以ping相互的ip地址)

3.确保手机usb调试打开,使用usb连接手机,然后执行命令:adb tcpip 5555

4.断开usb连接

5.输入命令:adb connect 手机ip地址(如 adb connect 192.168.1.111)

以上为部份分享,若是有兴趣的欢迎关注,后期有任何分享欢迎讨论,有任何不对的地方也欢迎指点。

Android ART编译模式解析 ART实际就是Android runtime的缩写,他是Android版本新的虚拟机。 阅读详情

相关推荐

7年老Android一次操蛋的面试经历

起由 搞了7年多Android了,前阵子面试了一家不大不小的公司。公司不大,面试官架子还不小,一副目中无人高高在上的样子,搞得好像我一万个想进他们公司、我进不了他们公司我全家都得喝西北风一样。搞得我是真的郁闷:现在搞Android的找工作这么卑微??? 给大家分享一下我的面试经历 操蛋的面试 一面 面试官:先介绍一下自己吧,做过哪些项目,掌握哪些技能 我内心:(简历都有写的,你自己不会看么?只好照着简历里写的说了一遍) 熟悉Android Framework,组件化开发及MVC/MVP/MVVM程序设计

chuhe1989的博客 1402

ART编译模式学习

ART实际就是Android runtime的缩写,他与dalvik是两种Android的编译模式。

m0_53696288的博客 3956

dex2oat编译优化调试

dex2oat编译调试的一些技巧和方法

jidapenglin28的专栏 5046

Android speed和speed-profile冷启动速度对比

speed-profile机制在刚安装的时候会是verify,这时候不是很快,但是会在/data/misc/profiles/cur/0/"packageName"/目录下生成primary.prof文件,此文件就是记录热点代码的文件,然后在后台会触发speed-profile编译(充电静置30min或MTK自己做的逻辑,打开APP就会触发)。并且speed-profile生成一次热点代码后,会清空primary.prof文件,并继续记录热点代码,就像一个人工智能,持续学习并优化。

weixin_40400310的博客 2004

ABAP FB05 清账实战:POSTING_INTERFACE_CLEARING 核心参数与业务场景解析

本文深入解析ABAP FB05清账操作中的核心函数POSTING_INTERFACE_CLEARING,详细讲解其关键参数与业务场景应用。通过实战案例展示收款清账(EINGZAHL)流程,提供常见错误排查方法,并分享批量清账优化与财务凭证集成的高级技巧,帮助开发者高效处理SAP财务模块清账需求。

weixin_33423874的博客 477

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

2021年 Android面试总结(5年经验)

面试决心 12月初,靠着享学课堂的童鞋内推,面试了京东北辰,虽卡在hr面试,但是本人对自己的技术能力很有信心,2020年12月22日提出离职,利用7天年假时间去集中面试,最终如愿拿到满意的offer。 投递简历时,只考虑公司规模,投了10个左右的公司集中面,面试过程一波三折,虽然不是技术面试上的问题,但是有几家hr和审批也卡人的情况,让我猝不及防,不知如何表达当时的心情,委屈的内心只能苦笑。 功夫不负有心人,是个坑总有人跳的,终于入坑新东方在线,第一个收获的offer,终于赶在1月18日生日前得到一丝慰藉,

sjy0118的博客 1万+

BMW Standard Tools 宝马FSC工具套装下载

这是一款非常专业的一套宝马编码工具,懂行的人自然知道他的用处,不懂行的人,我解释再多也不会明白的,需要的拿去吧。软件名:BMW Standard Tools包含工具:BMW Coding Tool v2.50、change Language、CIC Mafia、Dr.Gini B021、EasyConnect、EDIABAS Konfigurator v1.1、EDIABAS Konfigurator v2.0.0、FSC-Tools_2.18、FSTool_v2_CarServer、INPA、ITool

Zj_arrow的博客 7000

【Android开发经验技巧】一个2年开发经验的安卓开发者的一些忠告

本文我将分享这几年所收集的精华。也许可以帮助某人更快上手,避免重复我犯的错误。 1. 不要重复造轮子 最初,我有一种不愿使用开源库的思想。不管需要什么,我总想自己去实现。这是一种非常可怕的思想。 如果在开发app的时候遇到一个问题,而这个问题已经被别人很好的解决了,为什么不使用它呢?你可以节省大量时间啊。 把更多的精力花在app的业务逻辑上吧。如果你想在app中发起一个网络

894

UE5实现距离测量功能

UE5实现距离测量功能

专注GIS开发 6268

AI Agent在核电站安全监控中的应用

核电站作为一种高效的能源生产设施,其安全问题一直是全球关注的焦点。任何安全事故都可能导致严重的人员伤亡、环境污染和经济损失。传统的核电站安全监控系统主要依赖于人工操作和固定规则的监控算法,存在监控效率低、无法实时应对复杂情况等问题。本文章的目的在于探讨如何利用AI Agent技术提升核电站安全监控的智能化水平,实现实时、准确的监测和智能决策。范围涵盖了AI Agent的基本原理、在核电站安全监控中的应用场景、相关算法和数学模型,以及实际项目的开发和应用。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 372

Android开发五年,分享一些行业经验

1.Android没凉,只是比以前难混了 7年前Android异军突起,成了新的万亿级市场,无数掘金人涌入,期待可以一展拳脚。 那时候大环境下的手游圈,只要你能有个可以运行的连连看就能找到工作,走上赛道被浪潮推着前进,这个行业不可谓不光明。 2020了,浪潮速度放缓,漫天飞舞着唱衰Android的讯息,“凉凉”是最多的字眼。 但放心,Android真的没凉! Android入门相对简单,初级Android很多很多,趋近饱和,你随意打开一个招聘app就能很直观的判断出来,现在Android准入的条件越来越高.

爱写代码的程序员 515

Proxmox(pve)集群(4)存储(1)配置分布式存储ceph

它使用一种称为CRUSH(Controlled Replication Under Scalable Hashing)算法的数据分布算法来将数据均匀地分布在多个存储节点上,并确保数据的冗余和容错。它负责管理数据的分布、冗余和自动修复。PVE支持本地存储、LVM、NFS、iSCSI、CephFS、RBD、ZFS等存储方式,我这里使用两种存储方式,一种是通过ceph实现分布式存储,一种是通过truenas实现集中式存储。自我管理和自动恢复:Ceph具有自我管理的特性,可以动态地调整和优化存储集群的配置。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2628

Android 面经总结分享(相当走心)_安卓面试经验,2024年最新android 面试基础

他之前在做面试准备的时候,从网上查找收集整理了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,进行刷题复习 Android 相关的知识,通过这次的面试效果检测,也体验出了结果。: 这个环节需要你按实际情况伺机而动,因为有的大厂是一条龙面完,有的是每一次面试都单独约,但是大厂一般的流程都比较慢,都在1周以上才能完成整场面试。其实还有几家小型公司的面试,我就不在此一一的说明了,因为文章篇幅长度有限,所以就挑选了几个自己觉得面的还不错的公司进行跟大家分享。

2401_84103616的博客 1284

手把手教你学 AI芯片 SOC软件开发专栏简介

在AI芯片(如NPU、GPU加速器)爆发式增长的今天,软件栈开发已成为AI应用落地的核心瓶颈。无论是模型推理加速、低延迟部署,还是能效优化,都依赖于对芯片底层软件的深度掌握。然而,许多开发者困于“只会调用API,不懂驱动实现”的困境,导致性能瓶颈难以突破。本专栏《手把手教你学 AI芯片 SOC软件开发》专为AI工程师、嵌入式开发者及系统架构师打造,从零基础切入,系统拆解AI芯片SOC(System on Chip)的完整软件栈,覆盖Runtime(运行时)

MHD0815的博客 172

基于Simulink的超级电容器充放电仿真

为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。如果你希望对超级电容器的充放电过程进行精确控制,可以添加一个简单的逻辑控制器来控制开关的状态。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。2. 添加超级电容器模型。7. 添加控制器(可选)1. 调整超级电容器参数。

xiaoheshang_123的博客 518

安卓面试,2024Android大厂面试经验分享

如果你觉得这些内容对你有帮助,可以扫码领取!!!!

2401_83703951的博客 696

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

十年Android开发经验分享,助你斩获大厂Offer!

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。Android学习PDF+学习视频+面试文档+知识点笔记【Android思维脑图(技能树)】知识不体系?

m0_60707660的博客 1092

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

字节跳动终面会刷人吗,北漂7年,10年Android开发经验

Android程序员35岁后并非无解,千里之行始于足下。Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。

2401_84002771的博客 1127

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Android面经】大厂Android面经分享之阿里巴巴

介绍自己的项目经验和个人的擅长点,面试官主要考察你的表达能力和语言精简能力。1、HashMap 1.7,1.8的差异,1.8中什么情况下转换为红黑树,构造函数中参数代表的意思2、用什么Map可以保证线程安全,为什么?ConcurrentHashMap为什么能保证线程安全?1.7和1.8原理有什么差异。3、有多少种单例模式,枚举算不算单例,单例模式中不用volatile会导致什么问题?volatile特性是什么?为什么android中不推荐使用枚举。

Eqiqi的博客 1257

2021Android性能优化总结最新、最全面、最完整的资料+实战经验分享

简介 说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才感觉运行速度稍微提高了点,就算手机在各种性能跑分软件面前分数遥遥领先,还是感觉无论有多大的内存空间都远远不够用。相信每个使用 Android 系统的用户都有过以上类似经历,确实,Android 系统在流畅性方面不如 IOS 系统,为何呢,明明在看手机硬件配置上时,Android 设备都不会输于 IOS 设

datian1234的博客 2539

工作三年的Android程序员 跳槽到“阿里“的面试经验分享

前言 工作三年,你可能会迷茫,要么觉得自己怀才不遇,要么觉得自己迷失方向,也可能觉得自己意气风发,不管怎么样,自己已经开始思考自己的人生了,事实上,很多工作三年的人就第一次做出了自己的选择,也就是换一份适合自己的工作。 面试分享 2017年毕业,目前从事android开发工作已经3年啦,前段时间刚完成一次跳槽,面试了几家公司,终于拿到了心仪大厂offer,下面将一些面试经验分享给大家,希望对大家有所帮助。 面试题: 公司一 组件化和arouter原理 recyclerview和listview区别 gl

大模型学习路线 2431

成功入职字节跳动,Android开发经验的有效总结

答应大伙的备战金三银四,大厂面试真题来啦!这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。给文章留个小赞,就可以免费领取啦~3000页Android开发者架构师核心知识笔记《960全网最全Android开发笔记》《379页Android开发面试宝典》

m0_60707708的博客 995

三年经验Android开发面经总结,面试资料分享

开头 每到“金三银四”的季节,总人很多人去寻找名叫“面经”一样的东西,其实就是一个个具体的题目,然后临阵磨枪,去“背”答案,如果一直是这样的话,我相信你的能力不会有任何提高,即使工作三年五年也达不到高级工程师的水平,事实证明这类“程序员”占大多数。而且我认为一个“面经”真正有价值的内容是面试前你是如何学习的,面试中面对不会的题目你是如何回答的,以及面试后的你的感受和总结,而不是冷冰冰的罗列题目。 Android 基础 1.Activity 1、 什么是 Activity?2、 请描述一下 Activity

m0_56051002的博客 227
上一篇: Android自定义控件 — 图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)
下一篇: Android 开源 | 新一代Android 性能监控框架Rabbit
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值