- 相關(guān)推薦
android面試題(3)
需要注意的是如果這幾個方法交織在一起的話,會出現(xiàn)什么情況呢?
一個原則是Service的onCreate的方法只會被調(diào)用一次,就是你無論多少次的startService又bindService,Service只被創(chuàng)建一次。
如果先是bind了,那么start的時候就直接運(yùn)行Service的onStart方法,如果先是start,那么bind的時候就直接運(yùn)行onBind方法。
如果service運(yùn)行期間調(diào)用了bindService,這時候再調(diào)用stopService的話,service是不會調(diào)用onDestroy方法的,service就stop不掉了,只能調(diào)用UnbindService, service就會被銷毀
如果一個service通過startService 被start之后,多次調(diào)用startService 的話,service會多次調(diào)用onStart方法。多次調(diào)用stopService的話,service只會調(diào)用一次onDestroyed方法。
如果一個service通過bindService被start之后,多次調(diào)用bindService的話,service只會調(diào)用一次onBind方法。
多次調(diào)用unbindService的話會拋出異常。
15. 不用service,B頁面為音樂播放,從A跳轉(zhuǎn)到B,再返回,如何使音樂繼續(xù)播放?
這個問題問的很山寨.默認(rèn)不做任何處理,B里面的音樂都能播放.
遇到問題, 可以隨機(jī)應(yīng)變,靈活發(fā)揮,多考慮些細(xì)節(jié),比如說這個題就可以這樣說,說說你對startActivityForResult的理解()
A開啟B的時候,用startActivityForResult()方法, B返回的時候把播放的狀態(tài)信息返回給A ,A繼續(xù)播放音樂.
16. 什么是IntentService?有何優(yōu)點?
普通的service ,默認(rèn)運(yùn)行在ui main 主線程
Sdk給我們提供的方便的,帶有異步處理的service類,
異步處理的方法 OnHandleIntent()
OnHandleIntent() 處理耗時的操作
17. 什么時候使用Service?
擁有service的進(jìn)程具有較高的優(yōu)先級
官方文檔告訴我們,Android系統(tǒng)會盡量保持擁有service的進(jìn)程運(yùn)行,只要在該service已經(jīng)被啟動(start)或者客戶端連接(bindService)到它。當(dāng)內(nèi)存不足時,需要保持,擁有service的進(jìn)程具有較高的優(yōu)先級。
1. 如果service正在調(diào)用onCreate, onStartCommand或者onDestory方法,那么用于當(dāng)前service的進(jìn)程相當(dāng)于前臺進(jìn)程以避免被killed。
2. 如果當(dāng)前service已經(jīng)被啟動(start),擁有它的進(jìn)程則比那些用戶可見的進(jìn)程優(yōu)先級低一些,但是比那些不可見的進(jìn)程更重要,這就意味著service一般不會被killed.
3. 如果客戶端已經(jīng)連接到service (bindService),那么擁有Service的進(jìn)程則擁有最高的優(yōu)先級,可以認(rèn)為service是可見的。
4. 如果service可以使用startForeground(true)方法來將service設(shè)置為前臺狀態(tài),那么系統(tǒng)就認(rèn)為是對用戶可見的,并不會在內(nèi)存不足時killed。
如果有其他的應(yīng)用組件作為Service,Activity等運(yùn)行在相同的進(jìn)程中,那么將會增加該進(jìn)程的重要性。
1.Service的特點可以讓他在后臺一直運(yùn)行,可以在service里面創(chuàng)建線程去完成耗時的操作. 天氣預(yù)報 widget TimerTask Timer 定期執(zhí)行timertask
2.Broadcast receiver捕獲到一個事件之后,可以起一個service來完成一個耗時的操作.
Broadcast receiver生命周期 和 響應(yīng)時間很短
3.遠(yuǎn)程的service如果被啟動起來,可以被多次bind, 但不會重新create. 索愛手機(jī)X10i的人臉識別的service可以被圖庫使用,可以被攝像機(jī),照相機(jī)等程序使用.
18. 請描述一下Intent 和 Intent Filter。
Android 中通過 Intent 對象來表示一條消息,一個 Intent 對象不僅包含有這個消息的目的地,還可以包含消息的內(nèi)容,這好比一封 Email,其中不僅應(yīng)該包含收件地址,還可以包含具體的內(nèi)容。對于一個 Intent 對象,消息“目的地”是必須的,而內(nèi)容則是可選項。
通過Intent 可以實現(xiàn)各種系統(tǒng)組件的調(diào)用與激活.
Intent filter: 可以理解為郵局或者是一個信箋的分揀系統(tǒng)…
這個分揀系統(tǒng)通過3個參數(shù)來識別
Action: 動作 view
Data: 數(shù)據(jù)uri uri
Category : 而外的附加信息
Action 匹配
Action 是一個用戶定義的字符串,用于描述一個 Android 應(yīng)用程序組件,一個 Intent Filter 可以包含多個 Action。在 AndroidManifest.xml 的 Activity 定義時可以在其 節(jié)點指定一個 Action 列表用于標(biāo)示 Activity 所能接受的“動作”,例如:
……
如果我們在啟動一個 Activity 時使用這樣的 Intent 對象:
Intent intent =new Intent();
intent.setAction("cn.itcast.action");
那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都將會匹配成功。
Android 預(yù)定義了一系列的 Action 分別表示特定的系統(tǒng)動作。這些 Action 通過常量的方式定義在 android.content. Intent中,以“ACTION_”開頭。我們可以在 Android 提供的文檔中找到它們的詳細(xì)說明。
URI 數(shù)據(jù)匹配
一個 Intent 可以通過 URI 攜帶外部數(shù)據(jù)給目標(biāo)組件。在 節(jié)點中,通過 節(jié)點匹配外部數(shù)據(jù)。
mimeType 屬性指定攜帶外部數(shù)據(jù)的數(shù)據(jù)類型,scheme 指定協(xié)議,host、port、path 指定數(shù)據(jù)的位置、端口、和路徑。如下:
android:host="host" android:port="port" android:path="path"/>
電話的uri tel: 12345
http://www.baidu.com
自己定義的uri itcast://cn.itcast/person/10
如果在 Intent Filter 中指定了這些屬性,那么只有所有的屬性都匹配成功時 URI 數(shù)據(jù)匹配才會成功。
Category 類別匹配
節(jié)點中可以為組件定義一個 Category 類別列表,當(dāng) Intent 中包含這個列表的所有項目時 Category 類別匹配才會成功。
默認(rèn)是DEFAULT
【android面試題(3)】相關(guān)文章:
android面試題目09-08
Android工程師的面試題08-07
Android工程師面試題10-24
Microsoft面試題09-04
iOS面試題07-10
公司面試題09-12
hibernate面試題10-18
英語面試題精選06-13
小升初面試題06-10