1點擊桌面圖標(biāo)(Launcher)--1向--->system_server發(fā)起startActivity請求
2system_server--2向-->zygote創(chuàng)建進(jìn)程請求
3zygote進(jìn)程fork出新子即App進(jìn)程
4App進(jìn)程梢褐,--向-->system_server進(jìn)程也切,發(fā)起attachApplication請求
5system_server收到請求準(zhǔn)備完畢之后---->App發(fā)起scheduleLaunchActivity請求
6App進(jìn)程的binder進(jìn)程(ApplicationThread)收到請求之后宦焦,通過handler向主線程發(fā)送LAUCH_ACTIVITY消息
7主線程收到Meaasge之后窝剖,通過反射創(chuàng)建目標(biāo)Activity,并且回調(diào)Activity.onCrete方法
8App已經(jīng)啟動哥蔚,進(jìn)入生命周期册烈,在執(zhí)行完onCreta->onstart->onResume->UI渲染完成之后倘屹,用戶就可以看到界面
啟動優(yōu)化方案
耗時檢測1:日志(display) 或者 命令行adb shell am start -S -W [packageName]/[activityName]
檢測2:cpuProfile工具
檢測3:StrictMode嚴(yán)苛模式候址,去檢測
手段:
1). 合理的使用異步初始化、延遲初始化族扰、懶加載機制厌丑。
2). 啟動過程避免耗時操作,如數(shù)據(jù)庫 I/O操作不要放在主線程執(zhí)行渔呵。
3). 類加載優(yōu)化:提前異步執(zhí)行類加載怒竿。
4). 合理使用IdleHandler進(jìn)行延遲初始化。
5). 簡化布局扩氢,條件與許下使用AsyncLayoutInflater(this).inflate異步初始化