一、APP启动

冷启动

系统不存在APP进程时,启动APP。如:首次通过桌面图标启动。

冷启动主要包含以下几步:
(1) 点击屏幕图标,launcher进程会通过binder 请求system_server进程,告诉AMS启动APP,AMS去PMS中查询APP的相关信息。
(2) 找到APP信息后,通过socket 的方式告诉zygote进程,启动APP进程。
(3) zygote进程fork出APP进程。
(4) APP进程会通过binder 调用AMS的attachApplication,AMS再通过binder 调用APP进程中Application的onCreate方法。
(5) 执行完毕Application的onCreate方法后,AMS继续通过一系列处理,最后通过binder 触发APP进程中Activity的生命周期:onCreate、onStart、onResume。

详细流程可以看AMS-Activity启动流程

热启动

APP成功展示,被切换到后台,再次启动APP。如:点击home键后,再展示APP。

温启动

APP退出但是进程仍然存在,重新启动APP。如:连续点击back键退出app,再马上启动app。

二、启动优化

可优化的节点

通过APP冷启动的流程,可以看到1、2、3步骤都是系统进行的操作,很难进行优化;而4、5两步,分别执行Application的onCreate和Activity的onCreate、onStart,应尽量避免耗时操作。

工具

1、通过adb命令

adb shell am start -W 包名/入口Activity(示例:adb shell am start -W com.niiiico.wgdemo/com.niiiico.wgdemo.MainActivity)
LaunchState: 启动方式
TotalTime: 新应用的启动耗时
WaitTime: 前一个应用的onPause + 新应用的启动耗时


2、通过profile

(1)点击app->Edit Configurations

(2)Edit Configurations设置

如图所示:
<1>选择app
<2>选择Profiling
<3>选中Start this recofing on startup
<4>勾选CPU activity
<5>选择Sample Java Methods
<6>点击OK第<5>步中,各个选项的意义;
Sample Java Methods:对java方法采样跟踪
Trace Java Methods:对java方法全量跟踪
Sample C/C++ Functions:对 C/C++ 函数采样跟踪
Trace System Calls:对系统调用进行跟踪

(3)点击run->profile->app,启动app。

(4)待app完全展示后,点击stop停止跟踪。

(5)分析面板

(6)点击线程进行切换;如:点击main线程,在右侧就会展示出详细信息。

(7)详细分析

通过切换tab,切换展示方式,进行详细分析。可以看出,统计时长16s,main线程中执行耗时6s,其中在Application的onCreate中,由于调用了sleep()函数耗时5s。

优化思路

通过以上方法,可以得到APP的启动时间,也可以找到耗时代码。通常为了避免影响启动速度,可以有以下思路。

1、onCreate中少写耗时代码,如:懒加载等,将一些不必要代码延后加载。
2、优化xml布局,避免过度绘制,节省UI的绘制时间。
3、优化代码,减少执行时间。
4、通过产品层面进行修改,如:过渡页面、广告页等。

三、黑白屏

原因

通过上文可知,启动APP是有耗时的,会感觉到点击 APP图标时会有 “延迟” 现象。为了解决这一问题,Google 在 APP创建的过程中,先展示一个空白页面,用户体会到点击图标之后立马就有响应。
这个空白页面的颜色是根据我们在 AndroiMainfest 文件中配置的主题背景颜色来决定的,现在一般默认是白色。

解决思路

1、取消空白预览,把锅甩给系统,

APP启动优化与黑白屏相关推荐

  1. App启动优化-一顿操作猛如虎

    前言 ++一个应用App的启动速度能够影响用户的首次体验,用户希望应用能够及时响应并快速加载.启动时间过长的应用不能满足这个期望,并且可能会令用户失望.这种糟糕的体验可能会导致用户在应用商店针对您的应 ...

  2. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  3. [纸上谈兵 1]——App启动优化

    0 纸上谈兵--App启动优化 纸上谈兵系列是我在学习App性能优化的笔记,纸上谈兵这个名字就很好的反应了这次只是启动优化的学习,并没有真正用到实际App的开发过程中(以后专门的同时处理),闲话少说, ...

  4. android 7.0 黑屏,Android app启动是出现白屏或者黑屏如何解决?

    1.为什么 APP 启动时会出现白屏或者黑屏? 当打开一个 Activity 时,如果这个 Activity 所属的应用还没有在运行,系统会为这个 Activity 所属的应用创建一个进程,但进程的创 ...

  5. Android 系统性能优化(72)-----App启动优化

    App启动优化的一篇深度好文 原文地址: http://www.jianshu.com/p/c056e63dc7a2 正文 对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题, ...

  6. Android性能优化(一):APP启动优化

    Android性能优化(一):APP启动优化 性能优化系列文章: Android性能优化(一):APP启动优化 Android性能优化(二):UI布局优化 Android性能优化(三):响应优化 An ...

  7. Android APP启动时出现白屏或者黑屏怎么办?

    1.为什么APP启动时会出现白屏或者黑屏? 当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要 ...

  8. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 @color/colorPrimary @color/colorPrimaryDark @color/colorAccent t ...

  9. 王学岗性能优化————APP启动优化(黑白屏问题的解决,trace工具的使用,热启动与冷启动的区别)

    一:手机启动 这个时候会启动HomeActivity;而各种APP图标就是HomeActivity中的控件,这些控件是可以点击的.与之对应的是,Launcher(继承了Activity)中有onCli ...

最新文章

  1. 终于有人站出来为程序员说话了
  2. codevs 2612 最有分解方案 (贪心)
  3. Linux查看utmp文件,linuxc操作utmp和wtmp文件接口
  4. NYOJ 286 动物统计
  5. Java扑克牌(斗地主发牌)
  6. 牛客网_PAT乙级_1013组个最小数 (20)
  7. [html] canvas生成图片有没有跨域问题?如果有如何解决?
  8. PyTorch框架学习十二——损失函数
  9. Visual Studio中Debug和Release的区别
  10. 基于dubbo + maven 的项目搭建
  11. 毕业题目:Matlab GUI界面
  12. 现代通信技术课程小结
  13. Mysql中LENGTH()函数
  14. 2016-2017-1(实变函数56, 点集拓扑56)
  15. 在家阳台做个小温室,种点小白菜和菠菜
  16. 如何在Ubuntu上安装并使用Docker
  17. 设计模式之 State(状态模式)通俗理解
  18. 做好OKR目标管理,迈出高效协作的第一步
  19. ap计算机课程的内容,AP系列七|解读AP计算机课程与考试
  20. 钉钉内网穿透工具,如何使用钉钉小程序访问内网

热门文章

  1. 罗湖区田心村旧改确认实施主体的公示,华润集团开发
  2. 我的世界服务器无限刷铁轨,我的世界红石技巧无限刷轨机 两个铁轨还你无限铁轨...
  3. Java代码调用PHP代码
  4. 中国气象年鉴(1986-2021)
  5. Kettle连接Oracle
  6. Scala 传值调用和传名调用
  7. java httpclient 关闭_HttpClient关闭连接
  8. OpenCV之Mat与Bitmap之间的转换
  9. DO447构建高级作业工作流--作业调度和配置通知
  10. 最新Smarty基础商品教程 Smarty入门教程 Smarty框架教程 共10课