启动方式:
通常来说,在安卓中应用的启动方式分为两种:冷启动和热启动。
1、冷启动:当启动应用时。后台没有该应用的进程,这时系统会 又一次创建一个新的进程分配给该应用,这个启动方式就是冷启动。
2、热启动:当启动应用时,后台已有该应用的进程(例:按 back 键、home 键,应用尽管会退出,可是该应用的进程是依旧会保留 在后台,可进入任务列表查看)。所以在已有进程的情况下。这样 的启动会从已有的进程中来启动应用。这个方式叫热启动。
特点
1、冷启动:冷启动由于系统会又一次创建一个新的进程分配给它。所以会先创 建和初始化 Application 类,再创建和初始化 MainActivity 类(包含一系列的測 量、布局、绘制),最后显示在界面上。
2、热启动:热启动由于会从已有的进程中来启动,所以热启动就不会走 Application 这步了,而是直接走 MainActivity(包含一系列的測量、布局、绘制)。 所以热启动的过程仅仅须要创建和初始化一个 MainActivity 即可了。而不必创建和初始化 Application,由于一个应用从新进程的创建到进程的销毁。Application 仅仅会初始化一次。
上面说的启动是点击 app 的启动图标来启动的。而第二种方式是进入近期使用的列表界面来启动应用,这样的不应该叫启动,应该叫恢复。
应用启动的流程
在安卓系统上,应用在没有进程的情况下,应用的启动都是这样一个流程:当点 击 app 的启动图标时。安卓系统会从 Zygote 进程中 fork 创建出一个新的进程分 配给该应用。之后会依次创建和初始化 Application 类、创建 MainActivity 类、 载入主题样式 Theme 中的 windowBackground 等属性设置给 MainActivity 以及 配置 Activity 层级上的一些属性、再 inflate 布局、当 onCreate/onStart/onResume 方法都走完了后最后才进行 contentView 的 measure/layout/draw 显示在界面 上,所以直到这里,应用的第一次启动才算完毕,这时候我们看到的界面也就是 所说的第一帧。
所以,总结一下,应用的启动流程例如以下:
Application 的构造器方法 ——>attachBaseContext()——>onCreate()——>Activity 的构造 方法——>onCreate()——>配置主题中背景等属性 ——>onStart()——>onResume()——>測量布局绘制显示在界面上。
測量应用启动的时间
冷启动
adb shell am start -W -n [PackageName]/.BrowserActivity
冷启动停止APP
adb shell am force-stop [packageName]
热启动
adb shell am start -W -n [PackageName]/.BrowserActivity
热启动停止APP
adb shell input keyevent 3