- 相關(guān)推薦
達(dá)內(nèi)安卓培訓(xùn)專家解密面試問題
在面試過程中會遇到什么樣的問題?有哪些技術(shù)問題是經(jīng)常被面試官考察的要點(diǎn)?那些面試中常出現(xiàn)的經(jīng)典問題有哪些標(biāo)準(zhǔn)答案可以拿來參考?……達(dá)內(nèi)安卓培訓(xùn)專家特就這類同學(xué)們面試中遇到的各類疑問總結(jié)了經(jīng)典面試問題如下。
1、在onCreate方法中Bundle savedInstanceState 這個參數(shù)有什么作用?
在onCreate方法中有saveInstanceState這個參數(shù),其實(shí)這個參數(shù)對應(yīng)兩個方法。
1voidonSaveInstanceState(BundleoutState);
2voidonRestoreInstanceState(BundlesavedInstanceState)。
3
當(dāng)某個activity變得“容易”被系統(tǒng)銷毀時,說白了就是系統(tǒng)在內(nèi)存不足或者其他異常情況下把你的Activity銷毀時,將調(diào)用這個方法。需要注意的是它是系統(tǒng)調(diào)用的,并且你的Activity是被動得被銷毀。你可以在銷毀的時候保存一下數(shù)據(jù)。然后在onCreate方法中拿出來。那什么情況下能觸發(fā)這兩個方法呢?
1)、當(dāng)用戶按下HOME鍵時。這是顯而易見的,系統(tǒng)不知道你按下HOME后要運(yùn)行多少其他的程序,自然也不知道activity A是否會被銷毀,故系統(tǒng)會調(diào)用onSaveInstanceState,讓用戶有機(jī)會保存某些非永久性的數(shù)據(jù)。以下幾種情況的分析都遵循該原則
2)、長按HOME鍵,選擇運(yùn)行其他的程序時。
3)、按下電源按鍵(關(guān)閉屏幕顯示)時。
4)、從activity A中啟動一個新的activity時。
5)、屏幕方向切換時,例如從豎屏切換到橫屏?xí)r。
在屏幕切換之前,系統(tǒng)會銷毀activity A,在屏幕切換之后系統(tǒng)又會自動地創(chuàng)建activity A,所以onSaveInstanceState一定會被執(zhí)行
總而言之,onSaveInstanceState的調(diào)用遵循一個重要原則,即當(dāng)系統(tǒng)“未經(jīng)你許可”時銷毀了你的activity,則onSaveInstanceState會被系統(tǒng)調(diào)用,這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋機(jī)會讓你保存你的數(shù)據(jù)(當(dāng)然你不保存那就隨便你了)。
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對的被調(diào)用的,onRestoreInstanceState被調(diào)用的前提是,activity A“確實(shí)”被系統(tǒng)銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被調(diào)用,例如,當(dāng)正在顯示activity A的時候,用戶按下HOME鍵回到主界面,然后用戶緊接著又返回到activity A,這種情況下activity A一般不會因?yàn)閮?nèi)存的原因被系統(tǒng)銷毀,故activity A的onRestoreInstanceState方法不會被執(zhí)行
另外,onRestoreInstanceState的bundle參數(shù)也會傳遞到onCreate方法中,你也可以選擇在onCreate方法中做數(shù)據(jù)還原。
2、談?wù)勀銓?/strong>BroadCastRceiver的理解?
廣播接收者,android四大組件之一,也是唯一一個能動態(tài)注冊的組件。
1)廣播接收者是一個專注于接收廣播通知信息,并做出對應(yīng)處理的組件。很多廣播是源自于系統(tǒng)──比如,通知時區(qū)改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項(xiàng)。應(yīng)用程序也可以進(jìn)行廣播──比如說,通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。
2)應(yīng)用程序可以擁有任意數(shù)量的廣播接收者以對所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類。
3)廣播接收者沒有用戶界面。然而,它們可以啟動一個activity來響應(yīng)它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態(tài)欄上放一個持久的圖標(biāo),用戶可以打開它并獲取消息。
3、廣播分幾種?他們有什么區(qū)別?
廣播被分為兩種不同的類型:“普通廣播(Normal broadcasts)”和“有序廣播(Ordered broadcasts)”。普通廣播是完全異步的,可以在同一時刻(邏輯上)被所有接收者接收到,消息傳遞的效率比較高,但缺點(diǎn)是:接收者不能將處理結(jié)果傳遞給下一個接收者,并且無法終止廣播Intent的傳播。
然而有序廣播是按照接收者聲明的優(yōu)先級別,被接收者依次接收廣播。如:A的級別高于B,B的級別高于C,那么,廣播先傳給A,再傳給B,最后傳給C 。優(yōu)先級別聲明在intent-filter 元素的android:priority 屬性中,數(shù)越大優(yōu)先級別越高,取值范圍:-1000到1000,優(yōu)先級別也可以調(diào)用IntentFilter對象的setPriority()進(jìn)行設(shè)置。有序廣播的接收者可以終止廣播Intent的傳播,廣播Intent的傳播一旦終止,后面的接收者就無法接收到廣播。
另外,有序廣播的接收者可以將數(shù)據(jù)傳遞給下一個接收者,如:A得到廣播后,可以往它的結(jié)果對象中存入數(shù)據(jù),當(dāng)廣播傳給B時,B可以從A的結(jié)果對象中得到A存入的數(shù)據(jù)。
Context.sendBroadcast() 發(fā)送的是普通廣播,所有訂閱者都有機(jī)會獲得并進(jìn)行處理。
Context.sendOrderedBroadcast() 發(fā)送的是有序廣播,系統(tǒng)會根據(jù)接收者聲明的優(yōu)先級別按順序逐個執(zhí)行接收者,
前面的接收者有權(quán)終止廣播(BroadcastReceiver.abortBroadcast()),如果廣播被前面的接收者終止,后面的接收者就再也無法獲取到廣播。對于有序廣播,前面的接收者可以將數(shù)據(jù)通過setResultExtras(Bundle)方法存放進(jìn)結(jié)果對象,然后傳給下一個接收者,下一個接收者通過代碼:Bundle bundle = getResultExtras(true))可以獲取上一個接收者存入在結(jié)果對象中的數(shù)據(jù)。
4、談?wù)勀銓?/strong>Activity的理解?
對于這種“你對什么什么怎么理解”的面試題,最好的回到方式就是用你自己的理解說出來,通俗中夾雜些專業(yè)術(shù)語,偶爾再蹦出幾個英文。當(dāng)然如果你很牛X,你可以往深了說,只要別漫無目的的說就行。圍繞一條主線。這其中如果你對某一方面比較精通,你就應(yīng)該往你精通的方向引。面試官可能就會順著你的思路走了。不過現(xiàn)在有很多面試問Android方面的知識不多,問java方面的比較多。
通俗的講,Activity就是一個應(yīng)用程序的門面,也可以理解成就是WEB程序中一個頁面,當(dāng)然與web程序中的頁面不同的是,web中的一個頁面可能只是一個純粹的展示頁面不與用戶進(jìn)行任何交互,而幾乎所有的Activity都會與用戶交互。當(dāng)然兩者在架構(gòu)上也有本質(zhì)區(qū)別,Activity與用戶的交互通過觸發(fā)UI的不同事件完成的。而Web程序是通過請求,響應(yīng)來完成交互的。還有在android中顛覆了很多常規(guī)想法,比如在一個Activity中可以打開另一個不在同一應(yīng)用的Activity。這在其他程序是不可想象的。當(dāng)然這種設(shè)計(jì)的出發(fā)點(diǎn)也是為了節(jié)省系統(tǒng)資源。從View層的角度來看,Activity承載了與用戶交互的不同控件。從控制層看,也就是內(nèi)部邏輯,Activity需要保持各個界面的狀態(tài),背后會做很多持久化的操作。包括妥善管理生命周期的各個階段。(把生命周期引出來了,沒準(zhǔn)就會問你這方面的)。
下面是文檔式的回答:(最好的回答方式兩者結(jié)合)
首先Activity是android四大組件之一。它是單獨(dú)的,作為用戶與程序交互的一個載體。幾乎所有的Activity都與用戶交互。Activity創(chuàng)建了一個窗口,你可以通過setContentView這個方法將需要的UI放置在窗口。任何一個應(yīng)用程序都可以調(diào)用單獨(dú)的一個Activity。
其次,Activity的繼承關(guān)系A(chǔ)ctivity→ContextThemeWrapper→ContextWrapper→Context
最后大部分的Activity的子類都需要實(shí)現(xiàn)以下兩個接口:
onCreate(Bundle savedInstanceState)接口是初始化activity的地方. 在這兒通?梢哉{(diào)用setContentView(int)設(shè)置在資源文件中定義的UI, 使用findViewById(int) 可以獲得UI中定義的窗口.
onPause()接口是使用者準(zhǔn)備離開activity的地方,在這兒,任何的修改都應(yīng)該被提交(通常用于ContentProvider保存數(shù)據(jù)).
所有Activity必須在清單文件里注冊一下才能使用。
5、Acitvity啟動模式?
對于這種題,最后就是自己寫個例子,觀察一下,才能真正明白。
Activty啟動提供了四種啟動模式。launchMode:
standard:每次啟動新的活動窗口(new操作)
singleTop:如果在棧頂是目標(biāo)活動,則直接打開.否則開啟新的活動窗口(new).
singleTask和singleInstance基本上相同.差別在于若根活動設(shè)置為singleTask時,則由此所開啟的活動也在同一任務(wù)中,即taskId相同。.而若根活動設(shè)置為singleInstance時,由此開啟的活動在新的任務(wù)中.即棧中只有一個活動,taskid不同。.其余情況相同.
【達(dá)內(nèi)安卓培訓(xùn)專家解密面試問題】相關(guān)文章:
安卓實(shí)習(xí)心得01-10
安卓開發(fā)自我介紹07-03
專家給出的面試技巧09-25
安卓開發(fā)工程師個人簡歷09-25
外國招聘專家如何面試09-26
面試的著裝問題02-21
關(guān)于面試的問題11-07
面試的問題及回答11-29
MBA面試經(jīng)典的面試問題09-25
騰訊面試的面試問題10-27