性能优化总结-Android启动速度优化

对于Android来说,启动的速度是至关重要的,假如用户点击app图标开始,很长时间进不了app主界面,那么这是不能忍受的,可能会造成app卡死,所以这里对app启动优化做一个总结。

App启动流程:

1.点击桌面App图标,launcher进程采用Binder IPC向system_server进程发起startActivity()请求。

2.system_server进程接收到请求后,向zygote进程发送创建进程的请求

3.Zygote进程fork出新的子进程,即App进程。

4.App进程,通过Binder IPC向sytem_server进程发起attachApplication请求

5.system_server进程收到请求后,进行一系列准备工作后,再通过binder IPC向进程发送s cheduleLaunchActivity请求。

6.App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息

7.主线程在收到message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法。

8.到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,ui渲染结束后便可以看到App的主界面。

对App启动速度优化应该从Application到启动界面的onWindowFocusChanged()。

一.相关概念

冷启动,热启动,温启动

冷启动:冷启动是指应用从头开始启动,系统进程在冷启动后才创建应用进程,发生冷气功的情况包括应用自设备启动后或终止应用后首次启动

温启动:温启动包含了在冷启动期间发生的部分操作;同时,它的开销要比热启动高。有许多潜在状态可视为温启动

热启动:在热启动中,系统的所有工作就是将Activity带到前台,只要应用的所有Activity仍驻留在内存中,应用就不必重复执行对象初始化,布局加载和绘制

1.用户在退出应用后又重新启动应用。进程可能未被销毁,继续运行,但应用需要执行oNCreate()从头开始创建Activity

2.系统将应用从内存中释放,然后用户又重新启动它,进程和Activity需要重启,但传递到oncreate()的已经保存的实例saveInstanceSta te对于完成此任务有一定的助益。

针对冷启动:进行耗时计算:

(1) 查看日志:(过滤字段display)如下图:

(2) adb命令进行查看(adb shell am start -S  -W  [packageName]/[activityName])

提示:需要进行配置adb环境变量  主要看totalTime

二.工具的使用(CPU Profile)

首先进行相关配置

第一步:如图点击选择Edit Configurations

第二步:如图选择:(第一步后弹出如下框进行相关选择)

相关解释:sample java methods :对Java方法进行采样有可能某个方法采集不到,所以选择 trace java methods(跟踪采样)

第三步:如图选择Profile app运行

第四步 :运行结束 如图


第五步进行分析:

1.Call Chart :(橙色的表示系统的类,绿色自己写的类,蓝色)  根据时间线查看调用栈,便于观察每次调用是何时发生的

横条越长,表明花费的时长就越长。

这里能看到各个部分耗费的时间长,比如布局的加载:

onCreate()方法的加载:


application的加载时长:

2.Flame Chart 火焰图:(橙色的表示系统的类,绿色自己写的类,蓝色)  根据时间线查看调用栈,便于观察每次调用是何时发生的。根据耗时百分比查看调用栈,便于发现总耗时很长的调用栈

出现的图像:

也是看x轴的长度,越长耗时越长,调用顺序从下往上看。

3.Top Down :查看记录数据中所有方法调用栈,便于观察其中每一步所消耗的精确时间

一层一层看下去, total 耗时长是按照从大到小排列。一层一层往下查,更符合我们查找耗时的思维,我个人是比较喜欢这种的。

4.Bottom  Up : 相对于Top Down Tree,能够更方便查看耗时方法如何被调用

展示的方式又不一样了。看一个一个方法,点进去才知道被谁调用了,比如dispatchMessage()是被main()调用的

Cpu Profile可能受版本限制,有些Android studio上可能没有这些功能。那只能代码进行操作了:

假如在低版本没有profile相关功能,我们也可以手动开启,在application中

在启动页关闭:


正常运行app:

查找Device File Explorer:

双击点开:就可以看到熟悉的图像了:

三.StrictMode(严苛模式)

是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提醒我们注意,以便我们能够修复它们

StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问,帮助我们让磁盘和网络操作远离主线程,可以使应用程序更加平滑,反应更快。

代码编写在application:

MainActivity中

运行:

在开启了StrictMode后,磁盘读写在主线程中,这是不允许的,直接奔溃。这样可以使我们更直观和更规范的进行相关的开发工作。

最后启动速度优化应该注意几个点:

1.高耗时任务应该放入子线程中。

2.Application中不要做耗时操作,第三方sdk初始化能懒加载就懒加载

3.类不要过于复杂

4.view的层级不要太复杂

......

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容