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