Android面試題整理最新(精華版)_第1頁(yè)
Android面試題整理最新(精華版)_第2頁(yè)
Android面試題整理最新(精華版)_第3頁(yè)
Android面試題整理最新(精華版)_第4頁(yè)
Android面試題整理最新(精華版)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、android 常用面試簡(jiǎn)答題1、 android中得動(dòng)畫有哪幾類,它們得特點(diǎn)與區(qū)別就是什么?參考答案:有兩種,一種就是 tween(補(bǔ)間) 動(dòng)畫、還有一種就是 frame(幀) 動(dòng)畫。tween 動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度得變化;另一種 frame 動(dòng)畫,傳統(tǒng)得動(dòng)畫方法,通過(guò)順序得播放排列好得圖片來(lái)實(shí)現(xiàn),類似電影。2、 請(qǐng)簡(jiǎn)述 handler 得機(jī)制原理參考答案:andriod提供了 handler與 looper來(lái)滿足線程間得通信。 handler先進(jìn)先出原則。looper 類用來(lái)管理特定線程內(nèi)對(duì)象之間得消息交換(message exchange)。1)

2、looper:一個(gè)線程可以產(chǎn)生一個(gè) looper對(duì)象,由它來(lái)管理此線程里 得 message queue(消息隊(duì)列 ) 。2) handler: 您可以構(gòu)造 handler 對(duì)象來(lái)與 looper 溝通,以便 push 新消息到 message queue 里;或者接收 looper 從 message queue 取出)所送來(lái)得消息。3) message queue( 消息隊(duì)列 ): 用來(lái)存放線程放入得消息。4) 線程: ui thread 通常就就是 main thread ,而 android 啟動(dòng)程序時(shí)會(huì)替它建立一個(gè) message queue。3、 說(shuō)說(shuō) mvc 模式得原理,它在 a

3、ndroid 中得運(yùn)用參考答案: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)事件,交給 model 處理。android鼓勵(lì)弱耦合與組件得重用, 在 androi

4、d中 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中寫代碼, 要通過(guò) activity交割

5、 model業(yè)務(wù)邏輯層處理, 這樣做得另外一個(gè)原因就是 android中得 acitivity得響應(yīng)時(shí)間就是 5s,如果耗時(shí)得操作放在這里,程序就很容易被回收掉。3) 模型層( model): 對(duì)數(shù)據(jù)庫(kù)得操作、對(duì)網(wǎng)絡(luò)等得操作都應(yīng)該在 model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也就是必須放在得該層得。4、通過(guò) intent 傳遞一些二進(jìn)制數(shù)據(jù)得方法有哪些?參考答案:1) 、 使用 serializable接口實(shí)現(xiàn)序列化,這就是java 常用得方法。2) 、 實(shí)現(xiàn) parcelable接口,這里 android 得部分類比如 bitmap 類就已經(jīng)實(shí)現(xiàn)了,同時(shí) parcelable在 android

6、 aidl中交換數(shù)據(jù)也很常見(jiàn)得。5、在 oncreate 方法中 bundle savedinstancestate 這個(gè)參數(shù)有什么作用?參考答案:在 oncreate 方法中有 saveinstancestate 這個(gè)參數(shù),其實(shí)這個(gè)參數(shù)對(duì)應(yīng)兩個(gè)方法。 void onsaveinstancestate(bundle outstate); void onrestoreinstancestate(bundle savedinstancestate) 。 當(dāng) 某 個(gè)activity 變得“容易”被系統(tǒng)銷毀時(shí),說(shuō)白了就就是系統(tǒng)在內(nèi)存不足或者其她異常情況下把您得 activity銷毀時(shí),將調(diào)用這個(gè)方法。

7、需要注意得就是它就是系統(tǒng)調(diào)用得,并且您得activity就是被動(dòng)得被銷毀。您可以在銷毀得時(shí)候保存一下數(shù)據(jù)。然后在oncreate 方法中拿出來(lái)。那什么情況下能觸發(fā)這兩個(gè)方法呢?1) 、當(dāng)用戶按下 home鍵時(shí)。這就是顯而易見(jiàn)得,系統(tǒng)不知道您按下home后要運(yùn)行多少其她得程序,自 然 也 不 知 道 activitya就 是 否 會(huì) 被 銷 毀 , 故 系 統(tǒng) 會(huì) 調(diào) 用onsaveinstancestate,讓用戶有機(jī)會(huì)保存某些非永久性得數(shù)據(jù)。以下幾 種情況得分析都遵循該原則2) 、長(zhǎng)按 home鍵,選擇運(yùn)行其她得程序時(shí)。3) 、按下電源按鍵(關(guān)閉屏幕顯示)時(shí)。4) 、從 activity a

8、中啟動(dòng)一個(gè)新得 activity時(shí)。5) 、屏幕方向切換時(shí),例如從豎屏切換到橫屏?xí)r。在屏幕切換之前,系統(tǒng)會(huì)銷毀activity a,在屏幕切換之后系統(tǒng)又會(huì)自動(dòng)地創(chuàng)建 activity a,所以 onsaveinstancestate一定會(huì)被執(zhí)行總而言之, onsaveinstancestate得調(diào)用遵循一個(gè)重要原則,即當(dāng)系統(tǒng) “未經(jīng)您許可”時(shí)銷毀了您得activity,則 onsaveinstancestate會(huì)被系統(tǒng)調(diào)用, 這就是系統(tǒng)得責(zé)任, 因?yàn)樗仨氁峁┮粋€(gè)機(jī)會(huì)讓您保存您得數(shù)據(jù)(當(dāng)然您不保存那就隨便您了) 。至 于 onrestoreinstancestate方 法 , 需 要 注 意

9、 得 就 是 ,onsaveinstancestate方法與 onrestoreinstancestate方法“不一定” 就是成對(duì)得被調(diào)用得,onrestoreinstancestate被調(diào)用得前提就是, activitya“確實(shí)”被系統(tǒng)銷毀了, 而如果僅僅就是停留在有這種可能性得情況下, 則該方法不會(huì)被調(diào)用, 例如,當(dāng)正在顯示 activitya 得時(shí)候, 用戶按下 home鍵回到主界面,然后用戶緊接著又返回到activitya,這 種情況下 activitya一般不會(huì)因?yàn)閮?nèi)存得原因被系統(tǒng)銷毀,故activitya得 onrestoreinstancestate方法不會(huì)被執(zhí)行另外, onre

10、storeinstancestate得 bundle 參數(shù)也會(huì)傳遞到 oncreate 方法中,您也可以選擇在oncreate 方法中做數(shù)據(jù)還原。6、請(qǐng)談?wù)?activity 得生命周期?參考答案:在系統(tǒng)中得 activity被一個(gè) activity棧所管理。當(dāng)一個(gè)新得activity啟動(dòng)時(shí),將被放置到棧頂,成為運(yùn)行中得activity,前一個(gè)activity保留在棧中,不再放到前臺(tái),直到新得activity退出為止。activity有四種本質(zhì)區(qū)別得狀態(tài):1) 在屏幕得前臺(tái) (activity棧頂),叫做活動(dòng)狀態(tài)或者運(yùn)行狀態(tài) ( active or running)2) 如果一個(gè) activi

11、ty失去焦點(diǎn),但就是依然可見(jiàn)(一個(gè)新得非全屏得activity或者一個(gè)透明得activity被放置在棧頂) ,叫做暫停狀態(tài)( paused)。一個(gè)暫停狀態(tài)得 activity依然保持活力(保持所有得狀態(tài),成員信息,與窗口管理器保持連接) ,但就是在系統(tǒng)內(nèi)存極端低下得時(shí)候?qū)⒈粴⒌簟?) 如果一個(gè) activity被另外得 activity完全覆蓋掉,叫做停止?fàn)顟B(tài)( stopped)。它依然保持所有狀態(tài)與成員信息, 但就是它不再可見(jiàn), 所以它得窗口被隱藏,當(dāng)系統(tǒng)內(nèi)存需要被用在其她地方得時(shí)候, stopped 得activity 將被殺掉。4) 如果一個(gè) activity就是 paused 或者 s

12、topped 狀態(tài),系統(tǒng)可以將該activity 從內(nèi)存中刪除, android 系統(tǒng)采用兩種方式進(jìn)行刪除, 要么要求該 activity 結(jié)束,要么直接殺掉它得進(jìn)程。 當(dāng)該 activity 再次顯示給用戶時(shí),它必須重新開(kāi)始與重置前面得狀態(tài)。activity提供了 7 個(gè)生命周期方法: oncreate(),onstart(),onresume(),onpause(),onstop(),ondestory(), onrestart()。在這七個(gè)生命周期方法中有三個(gè)關(guān)鍵得循環(huán)。其實(shí)官方給 得那張圖畫得很明白, 但估計(jì)很少人能有耐心去揣摩。 那就換種方式展現(xiàn)。瞧圖吧:1)以下該圖呈現(xiàn)了一個(gè) ac

13、tivity 完整得生命周期, 從 oncreate(bundle) 開(kāi)始到 ondestroy() 結(jié)束。 activity 在 oncreate() 設(shè)置所有得“全局” 狀態(tài),在 ondestory() 釋放所有得資源。首 先 我 們 運(yùn) 行 程 序 , 這 就 是 打 開(kāi) mainactivity依 次 調(diào) 用oncreate->onstart->onresume ,這時(shí) mainactivity在棧頂,與我們交互得 activity都 在 棧 頂 。 然 后 我 按 下 返 回 鍵 , 則 會(huì) 依 次 調(diào) 用onpause->onstop->ondestory

14、。這屬于一個(gè)完整得生命周期。7、談?wù)勀鷮?duì) broadcastrceiver得理解?參考答案:廣播接收者, android 四大組件之一,也就是唯一一個(gè)能動(dòng)態(tài)注冊(cè)得組件。1)廣播接收者就是一個(gè)專注于接收廣播通知信息,并做出對(duì)應(yīng)處理得組件。很多廣播就是源自于系統(tǒng)比如, 通知時(shí)區(qū)改變、 電池電量低、 拍攝了一張照片或者用戶改變了語(yǔ)言選項(xiàng)。 應(yīng)用程序也可以進(jìn)行廣播比如說(shuō),通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。 2)應(yīng)用程序可以擁有任意數(shù)量得廣播接收者以對(duì)所有它感興趣得通知信息予以響應(yīng)。所有得接收器均繼承自 broadcastreceiver基類。3)廣播接收者沒(méi)有用戶界面。 然而,它們可以啟

15、動(dòng)一個(gè) activity來(lái)響應(yīng)它們收到得信息, 或者用 notificationmanager來(lái)通知用戶。通知可以用很多種方式來(lái)吸引用戶得注意力閃動(dòng)背燈、 震動(dòng)、播放聲音等等。 一般來(lái)說(shuō)就是在狀態(tài)欄上放一個(gè)持久得圖標(biāo),用戶可以打開(kāi)它并獲取消息。8、 廣播分幾種?她們有什么區(qū)別?參考答案:廣播被分為兩種不同得類型:“普通廣播(normal broadcasts)”與“有序廣播( ordered broadcasts )”。普通廣播就是完全異步得,可以在同一時(shí)刻(邏輯上)被所有接收者接收到,消息傳遞得效率比較高,但缺點(diǎn)就是:接收者不能 將處理結(jié)果傳遞給下一個(gè)接收者,并且無(wú)法終止廣播intent得傳

16、播。然而有序廣播就是按照接收者聲明得優(yōu)先級(jí)別,被接收者依次接收廣播。如:a 得級(jí)別高于 b,b 得級(jí)別高于 c, 那么,廣播先傳給 a,再傳給 b,最后傳給 c 。優(yōu)先級(jí)別聲明在 intent-filter元素得 android:priority屬性中,數(shù)越大優(yōu)先級(jí)別越高 , 取值范圍 :-1000到 1000,優(yōu)先級(jí)別也可以調(diào)用 intentfilter對(duì)象得setpriority()進(jìn)行設(shè)置 。有序廣播得接收者可以終止廣播intent得傳播,廣播 intent得傳播一旦終止,后面得接收者就無(wú)法接收到廣播。另外,有序廣播得接收者可以將數(shù)據(jù)傳遞給下一個(gè)接收者,如:a 得到廣播后, 可以往它得結(jié)

17、果對(duì)象中存入數(shù)據(jù),當(dāng)廣播傳給b 時(shí),b 可以從 a 得結(jié)果對(duì)象中得到 a 存入得數(shù)據(jù)。context 、sendbroadcast()發(fā)送得就是普通廣播,所有訂閱者都有機(jī)會(huì)獲得并進(jìn)行處理。context 、sendorderedbroadcast()發(fā)送得就是有序廣播, 系統(tǒng)會(huì)根據(jù)接收者聲明得優(yōu)先級(jí)別按順序逐個(gè)執(zhí)行接收者, 前面得接收者有權(quán)終止廣播 (broadcastreceiver、abortbroadcast(),如果廣播被前面得接收者終止,后面得接收者就再也無(wú)法獲取到廣播。對(duì)于有序廣播, 前面得接收者可以將數(shù)據(jù)通過(guò)setresultextras(bundle)方法存放進(jìn)結(jié)果對(duì)象,然 后

18、 傳 給 下 一 個(gè) 接 收 者 , 下 一 個(gè) 接 收 者 通 過(guò) 代 碼 : bundlebundle= getresultextras(true)可以獲取上一個(gè)接收者存入在結(jié)果對(duì)象中得數(shù)據(jù)。9、 廣播得生命周期?參考答案:廣播得生命周期就是非常短得,當(dāng)發(fā)送之后intent會(huì)到 androidmanifest、xml 文件中找就是不就是有匹配得action ,如果有就會(huì)調(diào)用 receiver,然后獲得receiver對(duì)象,再執(zhí)行 onreceive 方法, 這時(shí)候 receiver 對(duì)象就沒(méi)有用了, 當(dāng)我們?cè)俅吸c(diǎn)擊按鈕得時(shí)候就會(huì)重新獲得對(duì)象, 這就就是 broadcastreceiver得

19、生命周期、在 broadcastreceiver里 不 能 做 一 些 比 較 耗 時(shí) 得 操 作 , 否 側(cè) 會(huì) 彈 出anr(application no response)得對(duì)話框、如果需要完成一項(xiàng)比較耗時(shí)得工作 , 應(yīng)該通過(guò)發(fā)送 intent給service,由service 來(lái)完成、這里不能使用子線程來(lái)解決 , 因?yàn)?broadcastreceiver得生命周期很短 , 子線程可能還沒(méi)有結(jié)束, broadcastreceiver就先結(jié)束了、 broadcastreceiver 一旦結(jié)束 , 此時(shí) broadcastreceiver得所在進(jìn)程很容易在系統(tǒng)需要內(nèi)存時(shí)被優(yōu)先 殺死, 因?yàn)樗?/p>

20、屬于空進(jìn)程 ( 沒(méi)有任何活動(dòng)組件得進(jìn)程 ) 、如果它得宿主進(jìn)程被殺死 , 那么正在工作得子線程也會(huì)被殺死、所以采用子線程來(lái)解決就是不可靠得、9、 兩種注冊(cè) broadcastreceiver 得方法?參考答案:使用在 manifest中注冊(cè)得方法注冊(cè)broadcastreceiver,即使您得應(yīng)用程序沒(méi)有啟動(dòng), 或者已經(jīng)被關(guān)閉, 這個(gè) broadcastreceiver依然會(huì)繼續(xù)運(yùn)行, 這樣得運(yùn)行機(jī)制可能會(huì)給軟件得用戶造成困擾。所以作為程序得開(kāi)發(fā)者, 我們希望能夠有一種靈活得機(jī)制完成 broadcastreceiver得綁定與解除綁定操作。 android 當(dāng)然也考慮到了這些問(wèn)題, 所以在 c

21、ontext 這個(gè)類當(dāng)中提供了如下兩個(gè)函數(shù)可以在代碼中注冊(cè):i 、 registerreceiver(receiver,filter);這個(gè)函數(shù)得作用就就是將一個(gè) broadcastreceiver注冊(cè)到應(yīng)用程序當(dāng)中, 這個(gè)函數(shù)接收兩個(gè)參數(shù), 第一個(gè)參數(shù)就是需要注冊(cè)得 broadcastreceiver對(duì)象,第二個(gè)就是一個(gè) intentfilter。第一個(gè)參數(shù)就是非常容易理解得,第二個(gè)參數(shù)得作用 就是定義了哪些 intent才能觸發(fā)這個(gè)注冊(cè)得 broadcastreceiver對(duì)象。ii 、 unregisterreceiver(receiver);這個(gè)方法就非常得簡(jiǎn)單了, 用于解除 broa

22、dcastreceiver得綁定狀態(tài)。一旦解除完成,響應(yīng)得 broadcastreceiver就不會(huì)再接收系統(tǒng)所廣播得 intent了。兩種注冊(cè) broadcastreceiver得方法1、在應(yīng)用程序得代碼中進(jìn)行注冊(cè)注冊(cè) broadcastreceiverregisterreceiver(receiver,filter);取消注冊(cè) broadcastreceiver unregisterreceiver(receiver);2、在 androidmanifest、xml 當(dāng)中進(jìn)行注冊(cè)<receiver android:name="smsreceiver"><

23、;intent-filter><action android:name="android、provider 、telephony 、sms_received" /></intent-filter></receiver>兩種注冊(cè) broadcastreceiver方法得比較:現(xiàn)在我們了解了兩種注冊(cè) broadcastreceiver 得方法之后,需要考慮一下這兩種方法適用得場(chǎng)合:i 、 第一種注冊(cè)得方法可以保證在應(yīng)用程序安裝之后, broadcastreceiver 始終處于活動(dòng)狀態(tài),通常用于監(jiān)聽(tīng)系統(tǒng)狀態(tài)得改變,比如說(shuō)手機(jī)得電量, w

24、ifi 網(wǎng)卡得 狀態(tài) ( 當(dāng) 然 , 監(jiān) 視 這 些東 西也 就是 取 決于 軟件 得需 求 )。 對(duì) 于 這 樣 得broadcastreceiver ,通常就是在產(chǎn)生某個(gè)特定得系統(tǒng)事件之后,進(jìn)行相應(yīng)得操作,比如說(shuō) wifi 網(wǎng)卡打開(kāi)時(shí),給用戶一個(gè)提示;ii 、 第二種注冊(cè)方法相對(duì)第一種要靈活得多,這樣注冊(cè)得broadcastreceiver 通常用于更新 ui 得狀態(tài)。一般來(lái)說(shuō), 都就是在一個(gè) activity啟動(dòng)得時(shí)候使用這樣得方法注冊(cè) broadcastreceiver,一旦接收到廣播得事件, 就可以在 onreceive 方法當(dāng)中更新當(dāng)前得這個(gè) activity當(dāng)中得控件。但就是需要

25、注意得就是如果這 個(gè) activity不可見(jiàn)了,就應(yīng)該調(diào)用 unregisterreceiver方法來(lái)解除注冊(cè)10、android 中線程與線程,進(jìn)程與進(jìn)程之間如何通信參考答案:1 、一個(gè) android程序開(kāi)始運(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程序開(kāi)始運(yùn)行時(shí),就有一個(gè)主線程main thread 被創(chuàng)建。該線程主要負(fù)責(zé) ui界面得顯示、更新與控件交互,所

26、以又叫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)致異常。11、view 如何進(jìn)行刷新?參考答案:在一個(gè)開(kāi)啟得線程中調(diào)用handler 對(duì)象得 sendmessa

27、ge方法發(fā)送信息 , 在 ui 線程中調(diào)用 handler對(duì)象得回調(diào)方法 handlemessage 進(jìn)行處理,在回調(diào)方法中執(zhí)行invalidate或者 postinvalidate、12、anr就是什么?哪些情況下會(huì)發(fā)生?開(kāi)發(fā)時(shí)如何避免anr?參考答案:anr(applicationnot responding) :應(yīng)用程序無(wú)應(yīng)答。默認(rèn)情況下,在android 中 activity得最長(zhǎng)阻塞時(shí)間就是 5 秒, broadcastreceiver得最長(zhǎng)執(zhí)行時(shí)間則就是 10 秒。為了避免出現(xiàn) anr,可以在做比較耗時(shí)操作時(shí),盡量使用子線程或 service 。13、請(qǐng)描述 sax、dom 、pu

28、ll解析 xml 得原理,以及各自優(yōu)缺點(diǎn)。參考答案:這里首先明白什么就是sax就是一個(gè)用于處理 xml事件驅(qū)動(dòng)得“推”模型, 優(yōu)點(diǎn)就是一種解析速度快并且占用內(nèi)存少得xml 解析器,它需要哪些數(shù)據(jù)再加載與解析哪些內(nèi)容。缺點(diǎn)就是它不會(huì)記錄標(biāo)簽得關(guān)系,而要讓您得應(yīng)用程序自己處理,這樣就增加了您程序得負(fù)擔(dān)。dom就是一種文檔對(duì)象模型, dom可以以一種獨(dú)立于平臺(tái)與語(yǔ)言得方式訪問(wèn)與修 改一個(gè)文檔得內(nèi)容與結(jié)構(gòu)。 dom技術(shù)使得用戶頁(yè)面可以動(dòng)態(tài)地變化,如可以動(dòng)態(tài)地顯示或隱藏一個(gè)元素,改變它們得屬性,增加一個(gè)元素等,dom技術(shù)使得頁(yè)面得交互性大大地增強(qiáng)。缺點(diǎn)就是dom解析 xml文件時(shí),會(huì)將 xml文件 得所

29、有內(nèi)容以文檔樹(shù)方式存放在內(nèi)存中。pull解析與 sax解析很相似 ,pull解析與 sax 解析不一樣得地方就是 pull讀取xml 文件后觸發(fā)相應(yīng)得事件調(diào)用方法返回得就是數(shù)字還有pull可以在程序中控制想解析到哪里就可以停止解析14、請(qǐng)解釋什么就是 aidl?參考答案:aidl:androidinterfacedefinitionlanguage, 即 android 接口描述語(yǔ)言。android 系統(tǒng)中得進(jìn)程之間不能共享內(nèi)存,因此,需要提供一些機(jī)制在不同進(jìn)程之間進(jìn)行數(shù)據(jù)通信。為了使其她得應(yīng)用程序也可以訪問(wèn)本應(yīng)用程序提供得服務(wù),android程調(diào)用( remote procedurecall

30、 , rpc)方式來(lái)實(shí)現(xiàn)。與很多其她得基于樣, android使用一種接口定義語(yǔ)言(interface definition language系統(tǒng)采用了遠(yuǎn)程過(guò)rpc得解決方案一, idl)來(lái)公開(kāi)服務(wù)得接口。我們知道4 個(gè) android應(yīng)用程序組件中得3 個(gè)( activity、broadcast與 contentprovider)都可以進(jìn)行跨進(jìn)程訪問(wèn), 另外一個(gè) android應(yīng)用程序組件 service同樣可以。 因此,可以將這種可以跨進(jìn)程訪問(wèn)得服務(wù)稱為服務(wù)。aidl( androidinterfacedefinitionlanguage)15、dip、dpi 分別就是什么?參考答案:di

31、p(device independent pixels)設(shè)備獨(dú)立像素,與設(shè)備屏幕有關(guān)。dpi :屏幕像素密度。android最早就是沒(méi)有考慮到這么多屏幕分辨率得。最早得機(jī)器就是g1,她得分辨率就是480*320 。但就是,由于 android就是開(kāi)放得平臺(tái),各種各樣分辨率得設(shè)備都可以運(yùn)行。為了兼容這些平臺(tái), android從 1、6 開(kāi)始,加入了設(shè)備獨(dú)立像素, dip 或者 dp。標(biāo)準(zhǔn)屏幕 480*320 上, px 與 dip 就是 1 比 1 得。分辨率高得,比如800*480 ,就要按比例兌換成480*320 。開(kāi)發(fā)者在開(kāi)發(fā)得時(shí)候,ui 設(shè)計(jì)時(shí)最好用 dp,系統(tǒng)會(huì)自動(dòng)按比例計(jì)算為px,從

32、而適配視圖。dpi 就是屏幕像素密度。就就是1 英寸上像素點(diǎn)得個(gè)數(shù)。對(duì)于屏幕來(lái)說(shuō),dpi 越大,屏幕得精細(xì)度越高,屏幕瞧起來(lái)就越清楚。比如iphone4得視網(wǎng)膜級(jí)得屏幕肯定比iphone 3gs得屏幕像素密度高得多。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),這個(gè)不就是很重要。16、請(qǐng)介紹下 android 中常用得五種布局。參考答案:答:在 android中,共有五種布局方式, 分別就是: framelayout( 框架布局 ) ,linearlayout( 線性布局 ) ,absolutelayout(絕對(duì)布局 ) ,relativelayout(相對(duì)布局 ) ,tablelayout(表格布局 ) 。(1) fra

33、melayout框架布局 , 放入其中得所有元素都被放置在最左上得區(qū)域,而且無(wú)法為這些元素指定一個(gè)確切得位置, 下一個(gè)子元素會(huì)重疊覆蓋上一個(gè)子元素,適合瀏覽單張圖片。(2) linearlayout線性布局 , 就是應(yīng)用程序中最常用得布局方式,主要提供控件水平或者垂直排列得模型,每個(gè)子組件都就是以垂直或水平得方式來(lái)定位( 默認(rèn)就是垂直 ) 。(3) absolutelayout絕對(duì)定位布局 , 采用坐標(biāo)軸得方式定位組件, 左上角就是 (0 ,0) 點(diǎn),往右 x 軸遞增,往下y 軸遞增 , 組件定位屬性為 android:layout_x與 android:layout_y來(lái)確定坐標(biāo)。(4) r

34、elativelayout相對(duì)布局 , 根據(jù)另外一個(gè)組件或就是頂層父組件來(lái)確定下一個(gè)組件得位置。與 css里面得類似。(5) tablelayout表格布局 , 類似 html 里得 table 、使用 tablerow 來(lái)布局,其中 tablerow代表一行, tablerow 得每一個(gè)視圖組件代表一個(gè)單元格。17、請(qǐng)介紹下 android 得數(shù)據(jù)存儲(chǔ)方式。參考答案:答: android提供了 5 種方式存儲(chǔ)數(shù)據(jù):(1) 使用 sharedpreferences存儲(chǔ)數(shù)據(jù) ; 它就是 android 提供得用來(lái)存儲(chǔ)一些簡(jiǎn)單配置信息得一種機(jī)制, 采用了 xml格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中。只能在同一個(gè)

35、包內(nèi)使用,不能在不同得包之間使用。(2) 文件存儲(chǔ)數(shù)據(jù) ; 文件存儲(chǔ)方式就是一種較常用得方法,在 android 中讀取 / 寫入文件得方法, 與 java 中實(shí)現(xiàn) i/o 得程序就是完全一樣得, 提供了 open() 與 open() 方法來(lái)讀取設(shè)備上得文件。(3) sqlite數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù) ;sqlite就是 android 所帶得一個(gè)標(biāo)準(zhǔn)得數(shù)據(jù)庫(kù), 它支持 sql語(yǔ)句,它就是一個(gè)輕量級(jí)得嵌入式數(shù)據(jù)庫(kù)。(4) 使用 contentprovider 存儲(chǔ)數(shù)據(jù) ; 主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換, 從而能夠讓其她得應(yīng)用保存或讀取此 content provider 得各種數(shù)據(jù)類型。(5)

36、網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù) ; 通過(guò)網(wǎng)絡(luò)上提供給我們得存儲(chǔ)空間來(lái)上傳( 存儲(chǔ) ) 與下載 ( 獲取)我們存儲(chǔ)在網(wǎng)絡(luò)空間中得數(shù)據(jù)信息。!18、請(qǐng)說(shuō)明隱式、顯式 intent 得區(qū)別?參考答案:顯式 intent直接用組件得名稱定義目標(biāo)組件,這種方式很直接。但就是由于開(kāi)發(fā)人員往往并不清楚別得應(yīng)用程序得組件名稱,因此,顯式 intent更多用于在應(yīng)用程序內(nèi)部傳遞消息。比如在某應(yīng)用程序內(nèi),一個(gè)activity啟動(dòng)一個(gè) service 。隱式 intent恰恰相反,它不會(huì)用組件名稱定義需要激活得目標(biāo)組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。在顯式 intent消息中,決定目標(biāo)組件得唯一要素就就是組件名稱,因此,

37、如果您得intent中已經(jīng)明確定義了目標(biāo)組件得名稱,那么您就完全不用再定義其她intent內(nèi)容。而對(duì)于隱式 intent則不同,由于沒(méi)有明確得目標(biāo)組件名稱,所以必須由android系統(tǒng)幫助應(yīng)用程序?qū)ふ遗c intent請(qǐng)求意圖最匹配得組件。19、請(qǐng)說(shuō)明 getwritabledatabase() 與 getreadabledatabase()得區(qū)別?參考答案:getreadabledatabase()并不就是以只讀方式打開(kāi)數(shù)據(jù)庫(kù),而就是先執(zhí)getwritabledatabase(),失敗得情況下才調(diào)用。getwritabledatabase()與getreadabledatabase()方法都可

38、以獲取一個(gè)用于操作數(shù)據(jù)庫(kù)得sqlitedatabase實(shí)例。但getwritabledatabase()方法以讀寫方式打開(kāi)數(shù)據(jù)庫(kù),一旦數(shù)據(jù)庫(kù)得磁盤空間滿了,數(shù)據(jù)庫(kù)就只能讀而不能寫,倘若使用getwritabledatabase()打開(kāi)數(shù)據(jù)庫(kù)就會(huì)出錯(cuò)。getreadabledatabase()方法先以讀寫方式打開(kāi)數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)得磁盤空間滿了,就會(huì)打開(kāi)失敗,當(dāng)打開(kāi)失敗后會(huì)繼續(xù)嘗試以只讀方式打開(kāi)數(shù)據(jù)庫(kù)。20、 請(qǐng)描述下 activity 得生命周期。參考答案:activity得生命周期方法有: oncreate()、onstart()、onrestart()、onresume() 、onpaus

39、e() 、onstop()、ondestory()。activity主要生命周期得方法說(shuō)明:oncreate(bundle savedinstancestate):創(chuàng)建 activity時(shí)調(diào)用。設(shè)置在該方法中,還以bundle 得形式提供對(duì)以前儲(chǔ)存得任何狀態(tài)得訪問(wèn)!onstart(): activity變?yōu)樵谄聊簧蠈?duì)用戶可見(jiàn)時(shí)調(diào)用。onresume() : activity開(kāi)始與用戶交互時(shí)調(diào)用(無(wú)論就是啟動(dòng)還就是重新啟動(dòng)一個(gè)活動(dòng), 該方法總就是被調(diào)用得) 。onpause() : activity被暫停或收回 cpu 與其她資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)得, 也就是保護(hù)現(xiàn)場(chǎng),壓棧吧!ons

40、top():activity被停止并轉(zhuǎn)為不可見(jiàn)階段及后續(xù)得生命周期事件時(shí)調(diào)用。onrestart():重新啟動(dòng) activity時(shí)調(diào)用。該活動(dòng)仍在棧中,而不就是啟動(dòng)新得活動(dòng)。ondestroy(): activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被調(diào)用21、如何將一個(gè) activity 設(shè)置成窗口得樣式。參考答案:只需要設(shè)置 一下 activity得主題就可以了,在androidmanifest、xml中定義 activity得地方加上 android:theme="android:style/theme、dialog"這就使您得應(yīng)用程序變成對(duì) 話框得形式彈出來(lái)了?;?/p>

41、者android:theme="android:style/theme、translucent"。就變成半透明得。22、android 中 activity, intent, content provider, service各有什么區(qū)別?參考答案:答: activity:活動(dòng),就是最基本得 android 應(yīng)用程序組件。一個(gè)活動(dòng)就就是一個(gè)單獨(dú)得屏幕,每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立得類,并且從活動(dòng) 基類繼承而來(lái)。intent:意圖,描述應(yīng)用想干什么。最重要得部分就是動(dòng)作與動(dòng)作對(duì)應(yīng)得數(shù)據(jù)。content provider:內(nèi)容提供器, android應(yīng)用程序能夠?qū)⑺鼈兊脭?shù)據(jù)保存

42、到文件、sqlite 數(shù)據(jù)庫(kù)中, 甚至就是任何有效得設(shè)備中。 當(dāng)您想將您得應(yīng)用數(shù)據(jù)與其她應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。service :服務(wù),具有一段較長(zhǎng)生命周期且沒(méi)有用戶界面得程序。23、您如何評(píng)價(jià) android系統(tǒng)優(yōu)缺點(diǎn)?參考答案:優(yōu)勢(shì):一、開(kāi)放性 三、豐富得硬件選擇五、無(wú)縫結(jié)合得 google 應(yīng)用支持缺點(diǎn):一、安全與隱私二,開(kāi)發(fā)商自定義,不夠統(tǒng)一四、同類機(jī)型用戶減少24、返回鍵與 home 鍵區(qū)別?參考答案:返回鍵默認(rèn)行為就是finish處于前臺(tái)得 activity得即 activity得狀態(tài)為 destroy狀態(tài)為止,再次啟動(dòng)該 activity就是從 oncreate

43、開(kāi)始得 ( 不會(huì)調(diào)用 onsaveinstancestate方法 ) 。home鍵默認(rèn)就是 stop 前臺(tái)得 activity即狀態(tài)為 onstop 為止而不就是 destroy,若再次啟動(dòng) 它,會(huì)調(diào)用 onsaveinstancestate方法,保持上次 activity得狀態(tài)則就是從 onrestart開(kāi)始得 ->onstart()->onresume()。25、如果后臺(tái)得 activity 由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?參考答案:在”暫停 onpause” 狀態(tài)將數(shù)據(jù)保存。26、請(qǐng)介紹下 contentprovider 就是如何實(shí)現(xiàn)數(shù)據(jù)共享得?參考

44、答案:一個(gè)程序可以通過(guò)實(shí)現(xiàn)一個(gè)contentprovider得抽象接口將自己得數(shù)據(jù)完全暴露出去, 而且 content providers就是以類似數(shù)據(jù)庫(kù)中表得方式將數(shù)據(jù)暴露。content providers存儲(chǔ)與檢索數(shù)據(jù), 通過(guò)它可以讓所有得應(yīng)用程序訪問(wèn)到,這也就是應(yīng)用程序之間唯一共享數(shù)據(jù) 得方法。要想使應(yīng)用程序得數(shù)據(jù)公開(kāi)化,可通過(guò)2 種方法:創(chuàng)建一個(gè)屬于您自己得content provider或者將您得數(shù)據(jù)添加到一個(gè)已經(jīng)存在得contentprovider中,前提就是有相同數(shù)據(jù)類型并且有寫入content provider得權(quán)限。如何通過(guò)一套標(biāo)準(zhǔn)及統(tǒng)一得接口獲取其她應(yīng)用程序暴露得數(shù)據(jù)?a

45、ndroid提供了 contentresolver,外界得程序可以通過(guò)contentresolver接口訪問(wèn)contentprovider提供得數(shù)據(jù)。27、什么情況會(huì)導(dǎo)致 force close ?如何避免?能否捕獲導(dǎo)致其得異常?參考答案:程序出現(xiàn)異常,比如nullpointerexception。避免:編寫程序時(shí)邏輯連貫,思維縝密。能捕獲異常,在logcat中能瞧到異常信息,定位錯(cuò)誤并修改錯(cuò)誤28、請(qǐng)簡(jiǎn)述 android 應(yīng)用程序結(jié)構(gòu)就是哪些?參考答案:android應(yīng)用程序結(jié)構(gòu)就是:linux kernel(linux內(nèi)核 ) 、libraries(系統(tǒng)運(yùn)行庫(kù)或者就是c/c+ 核心庫(kù) ) 、application framework( 開(kāi)發(fā)框架包 ) 、 applications (核心應(yīng)用程序 )29、橫豎屏切換時(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得

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論