Android面试题——高级开发面试题一
一 面試題概述
二 面試題解答
2.1 請簡單的分析一下Android系統(tǒng)啟動流程的原理?
過程簡化分析:
- BootLoader:接通電源后,Boot ROM加載BootLoader到RAM
- Linux kernel:Linux內(nèi)核負責(zé)初始化各種軟硬件環(huán)境,加載驅(qū)動程序,掛載根文件系統(tǒng)等
- init進程:在init進程中,掛載虛擬文件系統(tǒng)、啟動property服務(wù)、當然更重要的是包括了啟動的各種系統(tǒng)服務(wù):serviceManager、adbd、mediasever、zygote、bootanmation等。
- zygote進程:zygote進程是Android系統(tǒng)最重要的進程之一。后續(xù)Android中的應(yīng)用進程都是由zygote進程fork出來的。因此,zygote是Android系統(tǒng)所有應(yīng)用進程的父進程
- systemServer進程:SystemServer進程,被稱為系統(tǒng)服務(wù)進程,屬于Android framework層的源碼實現(xiàn),通過android studio打開SystemServer.java,能夠看到其中聲明了大量的android的系統(tǒng)服務(wù)
- launcher的啟動:就是laucher程序的啟動的入口函數(shù)
- BootAnimation退出:Launcher啟動完成之后,開機動畫會進行出,這樣給用戶的體驗就是開機后,就直接進入到桌面了
啟動架構(gòu)圖:
2.2 App啟動狀態(tài)有哪幾種,各自的啟動流程是怎么樣的?
APP啟動狀態(tài)
- 冷啟動:App進程創(chuàng)建
- 熱啟動:Activity已創(chuàng)建,從后臺到前臺
- 溫啟動:App進程存在,但Activity結(jié)束
各自啟動流程
冷啟動
系統(tǒng)不存在App進程(APP首次啟動或APP被完全殺死)時啟動APP,此時,APP的啟動將經(jīng)歷兩個階段:
第一階段:
- 加載并啟動app;
- app啟動后,第一時間為app顯示一個空白的window;
- 創(chuàng)建app進程
第二階段:
- 系統(tǒng)一旦創(chuàng)建了app進程,app進程就要負責(zé)做以下的任務(wù):
創(chuàng)建app對象
- 啟動主進程ActivityThread;
- 創(chuàng)建MainActivity;
- 渲染視圖;
- 執(zhí)行onLayout;
- 執(zhí)行onDraw
- 完成第一次繪制后,把mainActivity替換已經(jīng)展示的BackgroundWindow,即空白window。
熱啟動
- 當我們按了Home鍵或其它情況app被切換到后臺,再次啟動app的過程。
- 熱啟動時,系統(tǒng)將activity帶回前臺。如果應(yīng)用程序的所有activity存在內(nèi)存中,則應(yīng)用程序可以避免重復(fù)對象初始化、渲染、繪制操作
- 如果由于內(nèi)存不足導(dǎo)致對象被回收,則需要在熱啟動時重建對象,此時與冷啟動時將界面顯示到手機屏幕上一樣。
溫啟動
溫啟動包含了冷啟動的一些操作,由于app進程依然在,溫啟動只執(zhí)行冷啟動的第二階段,這代表著它比熱啟動有更多的開銷。
溫啟動有很多場景,例如:
- 用戶按連續(xù)按返回退出了app,然后重新啟動app;
- 由于系統(tǒng)收回了app的內(nèi)存,然后重新啟動app。
2.3 當項目中遇到黑白屏問題,你有什么好的解決方案?
為什么會有黑白屏
在桌面點擊應(yīng)用圖標后,在app進程沒有創(chuàng)建的情況下,需要時間創(chuàng)建app進程,初始化資源,以及啟動首頁Activity的(這里討論的首頁是指AndroidManifest里面標志的啟動頁),這就意味點擊圖標不能馬上看到啟動頁。為了不讓用戶有卡頓的感覺,谷歌有了Preview Window,在啟動頁沒有繪制完成時,會先初始化一個Window,我們通常看到的黑屏或白屏,就是這個預(yù)覽窗口。
怎么知道是黑屏還是白屏?
查看這個AppTheme,找到name="android:windowBackground"這個屬性,查看屬性下的內(nèi)容,就能知道是黑屏還是白屏,這個屬性就是設(shè)置預(yù)覽窗口的背景。
如何解決黑白屏
2.4 如何查看方法內(nèi)的耗時時間與方法分析?
借助于Android自帶的分析工具:
- Traceview
- systrace
2.5 介紹一下AMS加載Applicaton流程?
AMS: ActivityManagerService
AMS是Android中最核心的服務(wù),主要負責(zé)系統(tǒng)中四大組件的啟動、切換、調(diào)度及應(yīng)用進程的管理和調(diào)度等工作,其職責(zé)與操作系統(tǒng)中的進程管理和調(diào)度模塊相類似,因此它在Android中非常重要。
ActivityManagerService啟動
- 創(chuàng)建AMS對象
- 調(diào)用ams.setSystemProcess
- 調(diào)用ams.installSystemProviders
- 調(diào)用ams.systemReady
2.6 啟動過程中有那幾個問題需要處理?
2.7 WMS管理UI的流程對啟動優(yōu)化的意義什么?
WMS窗口管理
三 參考
- CSDN—Android系統(tǒng)啟動流程分析
- CSDN—App三種啟動場景:冷啟動、熱啟動、溫啟動
- 簡書—啟動速度與執(zhí)行效率優(yōu)化項目實戰(zhàn)(二):啟動黑白屏解決
- 微信公眾號—讓你的Android應(yīng)用快速定位耗時方法
- 簡書—詳解AMS啟動流程
- 簡書—Android之AMS介紹
- 知乎—Framework之簡單上手AMS啟動流程
- 簡書—Android App啟動優(yōu)化
- Android 的窗口管理系統(tǒng) (View, Canvas, WindowManager)
- 簡書—Android WMS窗口管理
- 簡書—Android WMS窗口管理(二)
- 簡書—Android WMS(一)-窗口管理
總結(jié)
以上是生活随笔為你收集整理的Android面试题——高级开发面试题一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 趣图:在马路发现一个 HDMI 接口
- 下一篇: VSCODE配置C环境以及豆沙绿背景并且