Android之面试题总结加强版(一)
轉(zhuǎn)載:http://blog.csdn.net/itachi85/article/details/7426451
自己總結(jié)的最強(qiáng)android應(yīng)用面試題集
1.activity的生命周期。
| 方法 | 描述 | 可被殺死 | 下一個(gè) | ||
| onCreate() | 在activity第一次被創(chuàng)建的時(shí)候調(diào)用。這里是你做所有初始化設(shè)置的地方──創(chuàng)建視圖、綁定數(shù)據(jù)至列表等。如果曾經(jīng)有狀態(tài)記錄(參閱后述Saving?Activity?State。),則調(diào)用此方法時(shí)會(huì)傳入一個(gè)包含著此activity以前狀態(tài)的包對(duì)象做為參數(shù)。? 總繼之以onStart()。 | 否 | onStart() | ||
| ???? | onRestart() | 在activity停止后,在再次啟動(dòng)之前被調(diào)用。? 總繼之以onStart()。 | 否 | onStart() | |
| onStart() | 當(dāng)activity正要變得為用戶所見時(shí)被調(diào)用。? 當(dāng)activity轉(zhuǎn)向前臺(tái)時(shí)繼以onResume(),在activity變?yōu)殡[藏時(shí)繼以onStop()。 | 否 | onResume()? | ||
| ???? | onResume() | 在activity開始與用戶進(jìn)行交互之前被調(diào)用。此時(shí)activity位于堆棧頂部,并接受用戶輸入。? 繼之以onPause()。 | 否 | onPause() | |
| onPause() | 當(dāng)系統(tǒng)將要啟動(dòng)另一個(gè)activity時(shí)調(diào)用。此方法主要用來將未保存的變化進(jìn)行持久化,停止類似動(dòng)畫這樣耗費(fèi)CPU的動(dòng)作等。這一切動(dòng)作應(yīng)該在短時(shí)間內(nèi)完成,因?yàn)橄乱粋€(gè)activity必須等到此方法返回后才會(huì)繼續(xù)。? 當(dāng)activity重新回到前臺(tái)是繼以onResume()。當(dāng)activity變?yōu)橛脩舨豢梢姇r(shí)繼以onStop()。 | 是 | onResume()? | ||
| onStop() | 當(dāng)activity不再為用戶可見時(shí)調(diào)用此方法。這可能發(fā)生在它被銷毀或者另一個(gè)activity(可能是現(xiàn)存的或者是新的)回到運(yùn)行狀態(tài)并覆蓋了它。? 如果activity再次回到前臺(tái)跟用戶交互則繼以onRestart(),如果關(guān)閉activity則繼以onDestroy()。 | 是 | onRestart()? | ||
| onDestroy() | 在activity銷毀前調(diào)用。這是activity接收的最后一個(gè)調(diào)用。這可能發(fā)生在activity結(jié)束(調(diào)用了它的?finish()?方法)或者因?yàn)橄到y(tǒng)需要空間所以臨時(shí)的銷毀了此acitivity的實(shí)例時(shí)。你可以用isFinishing()?方法來區(qū)分這兩種情況。 | 是 | nothing | ||
2.橫豎屏切換時(shí)候activity的生命周期
1.不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次.?
2.設(shè)置Activity的android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次.?
3.設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法.
3.android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么?
? 兩種,一種是Tween動(dòng)畫、還有一種是Frame動(dòng)畫。Tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。
4.?一條最長的短信息約占多少byte?
? 中文70(包括標(biāo)點(diǎn)),英文160個(gè)字節(jié)。
5.handler機(jī)制的原理
andriod提供了?Handler?和?Looper?來滿足線程間的通信。Handler?先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對(duì)象之間的消息交換(Message?Exchange)。
1)Looper:?一個(gè)線程可以產(chǎn)生一個(gè)Looper對(duì)象,由它來管理此線程里的Message?Queue(消息隊(duì)列)。
?2)Handler:?你可以構(gòu)造Handler對(duì)象來與Looper溝通,以便push新消息到Message?Queue里;或者接收Looper從Message?Queue取出)所送來的消息。
3)?Message?Queue(消息隊(duì)列):用來存放線程放入的消息。
4)線程:UI?thread?通常就是main?thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message?Queue。
?
6.什么是嵌入式實(shí)時(shí)操作系統(tǒng),?Android?操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?
?
嵌入式實(shí)時(shí)操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、?軍事設(shè)備、?航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時(shí)間有苛刻的要求,這就需要使用實(shí)時(shí)系統(tǒng)。又可分為軟實(shí)時(shí)和硬實(shí)時(shí)兩種,而android是基于linux內(nèi)核的,因此屬于軟實(shí)時(shí)。
7.android中線程與線程,進(jìn)程與進(jìn)程之間如何通信
1、一個(gè)?Android?程序開始運(yùn)行時(shí),會(huì)單獨(dú)啟動(dòng)一個(gè)Process。
???默認(rèn)情況下,所有這個(gè)程序中的Activity或者Service都會(huì)跑在這個(gè)Process。
???默認(rèn)情況下,一個(gè)Android程序也只有一個(gè)Process,但一個(gè)Process下卻可以有許多個(gè)Thread。
2、一個(gè)?Android?程序開始運(yùn)行時(shí),就有一個(gè)主線程Main?Thread被創(chuàng)建。該線程主要負(fù)責(zé)UI界面的顯示、更新和控件交互,所以又叫UI?Thread。
???一個(gè)Android程序創(chuàng)建之初,一個(gè)Process呈現(xiàn)的是單線程模型--即Main?Thread,所有的任務(wù)都在一個(gè)線程中運(yùn)行。所以,Main?Thread所調(diào)用的每一個(gè)函數(shù),其耗時(shí)應(yīng)該越短越好。而對(duì)于比較費(fèi)時(shí)的工作,應(yīng)該設(shè)法交給子線程去做,以避免阻塞主線程(主線程被阻塞,會(huì)導(dǎo)致程序假死?現(xiàn)象)。?
3、Android單線程模型:Android?UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。如果在子線程中直接修改UI,會(huì)導(dǎo)致異常。
8.Android?dvm的進(jìn)程和Linux的進(jìn)程,?應(yīng)用程序的進(jìn)程是否為同一個(gè)概念?
DVM指dalivk的虛擬機(jī)。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。而每一個(gè)DVM都是在Linux?中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念。?
9.sim卡的EF?文件有何作用?
sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機(jī)通訊,sim本?身可以有自己的操作系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的?
10.android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么??
兩種,一種是Tween動(dòng)畫、還有一種是Frame動(dòng)畫。Tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。?
11.讓Activity變成一個(gè)窗口:Activity屬性設(shè)定?
講點(diǎn)輕松的吧,可能有人希望做出來的應(yīng)用程序是一個(gè)漂浮在手機(jī)主界面的東西,那么很?簡(jiǎn)單你只需要設(shè)置?一下Activity的主題就可以了在AndroidManifest.xml?中定義?Activity的?地方一句話:?
Xml代碼?
1.?android?:theme="@android:style/Theme.Dialog"?
這就使你的應(yīng)用程序變成對(duì)話框的形式彈出來了,或者?
Xml代碼?
1.?android:theme="@android:style/Theme.Translucent"?
就變成半透明的,[友情提示-.-]類似的這種activity的屬性可以在android.R.styleable?類的AndroidManifestActivity?方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個(gè)類android.R.styleable?
上面說的是屬性名稱,具體有什么值是在android.R.style中?可以看到,比如這個(gè)"@android:style/Theme.Dialog"?就對(duì)應(yīng)于android.R.style.Theme_Dialog?,('_'換成'.'?<?--注意:這個(gè)是文章內(nèi)容不是笑臉)就可以用在描述文件?中了,找找類定義和描述文件中的對(duì)應(yīng)關(guān)系就都明白了。?
12.如何將SQLite數(shù)據(jù)庫(dictionary.db文件)與apk文件一起發(fā)布??
解答:可以將dictionary.db文件復(fù)制到Eclipse?Android工程中的res?aw目錄中。所有在res?aw目錄中的文件不會(huì)被壓縮,這樣可以直接提取該目錄中的文件。可以將dictionary.db文件復(fù)制到res?aw目錄中?
13.如何將打開res?aw目錄中的數(shù)據(jù)庫文件??
解答:在Android中不能直接打開res?aw目錄中的數(shù)據(jù)庫文件,而需要在程序第一次啟動(dòng)時(shí)將該文件復(fù)制到手機(jī)內(nèi)存或SD卡的某個(gè)目錄中,然后再打開該數(shù)據(jù)庫文件。復(fù)制的基本方法是使用getResources().openRawResource方法獲得res?aw目錄中資源的?InputStream對(duì)象,然后將該InputStream對(duì)象中的數(shù)據(jù)寫入其他的目錄中相應(yīng)文件中。在Android?SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數(shù)據(jù)庫文件。?
14.在android中mvc的具體體現(xiàn)
Android?的官方建議應(yīng)用程序的開發(fā)采用MVC?模式。何謂MVC?先看看下圖
MVC?是Model,View,Controller?的縮寫,從上圖可以看出MVC?包含三個(gè)部分:
..?模型(Model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該
層。
..?視圖(View)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)
MVC?架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。
..?控制器(Control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新
Model?對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相
關(guān)事件,交給M?哦得了處理。
Android?鼓勵(lì)弱耦合和組件的重用,在Android?中MVC?的具體體現(xiàn)如下
1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,如何你對(duì)android了解的比較的多了話,就一定可?以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通?信,幸運(yùn)的是,android提供了它們之間非常方便的通信實(shí)現(xiàn)。
2)控制層(controller):android的控制層的重?任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理,?這樣做的另外一個(gè)原因是android中的acitivity的響應(yīng)時(shí)間是5s,如果耗時(shí)的操作放在這里,程序就很容易被回收掉。
3)模型層(model):對(duì)數(shù)據(jù)庫的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。
15.Android系統(tǒng)的架構(gòu)
android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和linux核心層。
1.應(yīng)用程序
Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。
2.應(yīng)用程序框架
開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。
隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng),?其中包括;
*?豐富而又可擴(kuò)展的視圖(Views),可以用來構(gòu)建應(yīng)用程序,?它包括列表(lists),網(wǎng)格(grids),文本框(text?boxes),按鈕(buttons),?甚至可嵌入的web瀏覽器。
*?內(nèi)容提供器(Content?Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),?或者共享它們自己的數(shù)據(jù)
*?資源管理器(Resource?Manager)提供?非代碼資源的訪問,如本地字符串,圖形,和布局文件(?layout?files?)。
*?通知管理器?(Notification?Manager)?使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。
*?活動(dòng)管理器(?Activity?Manager)?用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。
有關(guān)更多的細(xì)節(jié)和怎樣從頭寫一個(gè)應(yīng)用程序,請(qǐng)參考?如何編寫一個(gè)?Android?應(yīng)用程序.
3.系統(tǒng)運(yùn)行庫
1)程序庫
Android?包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過?Android?應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫:
*?系統(tǒng)?C?庫?-?一個(gè)從?BSD?繼承來的標(biāo)準(zhǔn)?C?系統(tǒng)函數(shù)庫(?libc?),?它是專門為基于?embedded?linux?的設(shè)備定制的。
*?媒體庫?-?基于?PacketVideo?OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4,?H.264,?MP3,?AAC,?AMR,?JPG,?PNG?。
*?Surface?Manager?-?對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提?供了2D和3D圖層的無縫融合。
*?LibWebCore?-?一個(gè)最新的web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。
*?SGL?-?底層的2D圖形引擎
*?3D?libraries?-?基于OpenGL?ES?1.0?APIs實(shí)現(xiàn);該庫可以使用硬件?3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。
*?FreeType?-位圖(bitmap)和矢量(vector)字體顯示。
*?SQLite?-?一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。
2)Android?運(yùn)行庫
Android?包括了一個(gè)核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。
每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。?Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了優(yōu)化。同時(shí)虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中?的?“dx”?工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。
Dalvik虛擬機(jī)依賴于linux內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。
4.Linux?內(nèi)核
Android?的核心系統(tǒng)服務(wù)依賴于?Linux?2.6?內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,?網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。?Linux?內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。
總結(jié)
以上是生活随笔為你收集整理的Android之面试题总结加强版(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之常见面试题
- 下一篇: Android面试题总结加强版(二)