Android--面试题整理(二)
11. 同一個程序,但不同的Activity是否可以放在不同的Task任務棧中?
比方說在激活一個新的activity時候, 給intent設置flag
Intent的flag添加FLAG_ACTIVITY_NEW_TASKsingleinstance? 單獨的任務棧
?? 這個被激活的activity就會在新的task棧里面…
??? Intentintent = new Intent(A.this,B.class);
??? intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
??? startActivity(intent);
?
12. Activity怎么和service綁定,怎么在activity中啟動自己對應的service?
?
startService() 一旦被創建? 調用著無關?? 沒法使用service里面的方法?
bindService () 把service 與調用者綁定 ,如果調用者被銷毀, service會銷毀
bindService() 我們可以使用service 里面的方法
??? bindService().? 讓activity能夠訪問到 service里面的方法
??? 構建一個intent對象,
Intentservice = new Intent(this,MyService.class);
?通過bindService的方法去啟動一個服務,
?? ? bindService(intent,new MyConn(), BIND_AUTO_CREATE);
??? ServiceConnection對象(重寫onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE.
??? privateclass myconn implements ServiceConnection
?
??? {
?
??????? publicvoid onServiceConnected(ComponentName name, IBinder service) {
??????????? //TODO Auto-generated method stub
??????????? //可以通過IBinder的對象 去使用service里面的方法
??????? }
?
??????? publicvoid onServiceDisconnected(ComponentName name) {
??????????? //TODO Auto-generated method stub
???????????
??????? }
???????
??? }
?
13. 14 .什么是Service以及描述下它的生命周期。Service有哪些啟動方法,有什么區別,怎樣停用Service?
在Service的生命周期中,被回調的方法比Activity少一些,只有onCreate, onStart, onDestroy,
onBind和onUnbind。
通常有兩種方式啟動一個Service,他們對Service生命周期的影響是不一樣的。
1 通過startService
?? ?Service會經歷 onCreate 到onStart,然后處于運行狀態,stopService的時候調用onDestroy方法。
?? 如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在后臺運行。
? 2 通過bindService??
??? Service會運行onCreate,然后是調用onBind, 這個時候調用者和Service綁定在一起。調用者退出了,Srevice就會調用onUnbind->onDestroyed方法。
?? 所謂綁定在一起就共存亡了。調用者也可以通過調用unbindService方法來停止服務,這時候Srevice就會調用onUnbind->onDestroyed方法。
需要注意的是如果這幾個方法交織在一起的話,會出現什么情況呢?
?
一個原則是Service的onCreate的方法只會被調用一次,就是你無論多少次的startService又bindService,Service只被創建一次。
如果先是bind了,那么start的時候就直接運行Service的onStart方法,如果先是start,那么bind的時候就直接運行onBind方法。
?
如果service運行期間調用了bindService,這時候再調用stopService的話,service是不會調用onDestroy方法的,service就stop不掉了,只能調用UnbindService, service就會被銷毀
?
?
如果一個service通過startService 被start之后,多次調用startService 的話,service會多次調用onStart方法。多次調用stopService的話,service只會調用一次onDestroyed方法。
?
?
如果一個service通過bindService被start之后,多次調用bindService的話,service只會調用一次onBind方法。
?
多次調用unbindService的話會拋出異常。
?
15. 不用service,B頁面為音樂播放,從A跳轉到B,再返回,如何使音樂繼續播放?
?這個問題問的很山寨.默認不做任何處理,B里面的音樂都能播放.
遇到問題, 可以隨機應變,靈活發揮,多考慮些細節,比如說這個題就可以這樣說,說說你對startActivityForResult的理解()
A開啟B的時候,用startActivityForResult()方法, B返回的時候把播放的狀態信息返回給A ,A繼續播放音樂.
?
?
16. 什么是IntentService?有何優點?
??? 普通的service ,默認運行在ui main 主線程
??? Sdk給我們提供的方便的,帶有異步處理的service類,
??? 異步處理的方法??? OnHandleIntent()
??? OnHandleIntent()處理耗時的操作
?
?
17. 什么時候使用Service?
擁有service的進程具有較高的優先級
?
官方文檔告訴我們,Android系統會盡量保持擁有service的進程運行,只要在該service已經被啟動(start)或者客戶端連接(bindService)到它。當內存不足時,需要保持,擁有service的進程具有較高的優先級。
?
1. 如果service正在調用onCreate,? onStartCommand或者onDestory方法,那么用于當前service的進程相當于前臺進程以避免被killed。
2. 如果當前service已經被啟動(start),擁有它的進程則比那些用戶可見的進程優先級低一些,但是比那些不可見的進程更重要,這就意味著service一般不會被killed.
3. 如果客戶端已經連接到service (bindService),那么擁有Service的進程則擁有最高的優先級,可以認為service是可見的。
4. 如果service可以使用startForeground(true)方法來將service設置為前臺狀態,那么系統就認為是對用戶可見的,并不會在內存不足時killed。
如果有其他的應用組件作為Service,Activity等運行在相同的進程中,那么將會增加該進程的重要性。
??? 1.Service的特點可以讓他在后臺一直運行,可以在service里面創建線程去完成耗時的操作. 天氣預報 widget TimerTask Timer 定期執行timertask??
?
??? 2.Broadcastreceiver捕獲到一個事件之后,可以起一個service來完成一個耗時的操作.?
Broadcast receiver生命周期 和 響應時間很短?
?
??? 3.遠程的service如果被啟動起來,可以被多次bind,但不會重新create.? 索愛手機X10i的人臉識別的service可以被圖庫使用,可以被攝像機,照相機等程序使用.
18. 請描述一下Intent 和 Intent Filter。
??? Android 中通過 Intent 對象來表示一條消息,一個 Intent 對象不僅包含有這個消息的目的地,還可以包含消息的內容,這好比一封Email,其中不僅應該包含收件地址,還可以包含具體的內容。對于一個 Intent 對象,消息“目的地”是必須的,而內容則是可選項。
通過Intent 可以實現各種系統組件的調用與激活.?
Intent filter: 可以理解為郵局或者是一個信箋的分揀系統…
這個分揀系統通過3個參數來識別
Action: 動作??? Intent.ation_view?
Data: 數據uri?? uri?mime
Category : 而外的附加信息?
Action 匹配
Action 是一個用戶定義的字符串,用于描述一個 Android 應用程序組件,一個 Intent Filter 可以包含多個 Action。在 AndroidManifest.xml 的 Activity 定義時可以在其 <intent-filter >節點指定一個 Action 列表用于標示 Activity 所能接受的“動作”,例如:
?<intent-filter >
?<actionandroid:name="android.intent.action.MAIN" />
?<actionandroid:name="cn.itcast.action" />
……
?</intent-filter>
?
如果我們在啟動一個 Activity 時使用這樣的 Intent 對象:
?Intent intent =new Intent();
?intent.setAction("cn.itcast.action");
?
那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都將會匹配成功。
Android 預定義了一系列的 Action 分別表示特定的系統動作。這些 Action 通過常量的方式定義在 android.content. Intent中,以“ACTION_”開頭。我們可以在 Android 提供的文檔中找到它們的詳細說明。
URI 數據匹配
一個 Intent 可以通過 URI 攜帶外部數據給目標組件。在 <intent-filter >節點中,通過 <data/>節點匹配外部數據。
mimeType 屬性指定攜帶外部數據的數據類型,scheme 指定協議,host、port、path 指定數據的位置、端口、和路徑。如下:
?<dataandroid:mimeType="mimeType" android:scheme="scheme"
?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 數據匹配才會成功。
Category 類別匹配
<intent-filter >節點中可以為組件定義一個 Category 類別列表,當 Intent 中包含這個列表的所有項目時 Category 類別匹配才會成功。
默認是DEFAULT
?
19. Intent傳遞數據時,可以傳遞哪些類型數據?
?
??? 1.一般的基本數據類型? Intent .putextra()? intent.getStringextra();
?
??? 2. 數據的uri, intent.setData()?intent.getData();
?
20. 說說Activity,Intent,Service是什么關系 。
??? 麥當勞和麥當娜的關系是什么關系?
??? 這種問題,就講下activity,講一下service,說一下通過intent去激活組件,傳遞數據.
??? 說自己項目中有這樣一個網絡更新的功能,顯示界面就用的activity, 后臺有個service每隔半小時都去訪問下服務器獲取更新的數據…
開啟服務用的是intent來開啟
總結
以上是生活随笔為你收集整理的Android--面试题整理(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Css 浏览器兼容性及其其他常见问题
- 下一篇: 关于oracle sql develop