安卓面試
97899983 四大組件
安卓4大組件:activity,service,content provider,broadcast receiver
1.activity
一個activity通常就是一個單獨的窗口
activity 之間通過intent進行通信
android應用每個activity都需要在androidManifest.xml配置文件中聲明
-------------------------------------------------------------------------------------
2.service 用於在後臺完成用戶指定的操作,兩種如下所示
(1)
started(啟動) :當應用程序組件(如activity)調用startServicer()方法啟動服務器時,服務處於started狀態
bound(綁定):當應用程序組件調用bindService()方法綁定到服務時,服務處於bound狀態
(2) startedService() 和 bindService()的區別
(a)started service()是由(其他組件)調用startService方法啟動的,這導致onStartCommand()方法被調用。
就算啟動它的組件被銷毀,他還是處於無限期運行,因此,服務需要在完成任務後(自己或其他組件)調用stopSelf()方法停止
(b)使用bindService()方法調用服務,調用這與服務綁定在一起,調用者退出,服務終止,不求同生,但求共死
(3)開發者需要在應用程序配置文件中聲明全部的service,使用<service></service>標簽
(4)service一般位於後臺運行,因此無需用戶交互,無service圖形化用戶界面,service組件需要繼承service基類。
service組件通常用於為其他組件提供後臺服務或監控其他組件的運行狀態
-----------------------------------------------------------------------------------------------------
3.content provider
(1)Content Provider使一個應用程序的 指定數據集 提供給其他的應用程序,其他應用可以通過ContentResolver
類從 該內容提供者中獲取或存入數據。
(2)只有需要多個應用程序間共享數據才需要內容提供者,好處是統一數據訪問方式
(3)ContentProvider實現數據共享。ContentProvider用於保存和獲取數據,並使其對所有應用程序可見,
這是不同應用程序共享數據的唯一方式,因為 安卓沒有提供所有應用共同訪問的公共存儲區。
(4)開發人員不會直接使用content provider 類的對象,大多數通過 Content Resolve 對象實現對content provider的操作
(5)ContentProvider使用URL來唯一標識其數據集,這裏的URL以content://作為前綴,表示該數據由ContentProvider來管理
************************************************************************************************************
4.broadcast receiver
(1)廣播接收器沒有用戶界面,通知可以用很多方式來吸引用戶的註意力,如閃光燈,震動等等,一般來說,在狀態欄上放一個持久的
圖標,用戶可以打開它並獲取信息
(2)廣播接收者的註冊有兩種方式,動態註冊 和 AndroidManifest 文件中進行靜態註冊
(3)動態註冊 和 靜態註冊的區別
動態:用來註冊的activity關掉後,廣播就會被關閉
靜態註冊:只要設備是開啟狀態(手機開機的)廣播接收器就是開啟的 ,無論app是否啟動,都一樣
***********************************************************************************************************
5.關於四大組件的總結
(1)四大組件的註冊
4大組件基本上都需要在 AndriodManifest 中註冊 才可使用,每個activity. service. Content Provider 都需要在AndroidManifest 文件中
進行配置。AndroidManifest 文件中未進行聲明的activity 將不會被調用,
broadcast receiver廣播接收者的註冊分靜態註冊和通過代碼動態創建並以調用 Context.register()的方式註冊至系統。
(2)四大組件的激活
內容提供者的激活:當接收到 ContentResolver 發出的請求後,內容提供者被激活,而其他三種組件activity,service,broadcast receiver
被一種叫做intent的異步消息所激活
(3)四大組件的關閉
內容提供者僅在響應 ContentResolver 提出請求的時候被激活,而一個廣播接收器僅在響應廣播信息的時候被激活,所以沒必要顯式的關閉這些組件
activity:可以調用它的finish()方法來關閉一個activity
service:startedService()開啟的需要調用Context.stopService()來關閉服務,bindService()開啟的需要調用Context.unbindService()關閉
(4)android 中的任務 (activity棧)
(a)任務就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的用戶體驗,棧底是啟動整個任務的activity,棧頂是當前運行的
用戶可交互的activity,當一個activity啟動另外一個的時候,新的activity就被壓入棧,並成為當前運行的activyty。棧中保存的其實是對象,
棧中的Activity永遠不會重排,只會壓入或彈出
(b)任務中的所有activity是作為一個整體進行移到的,整個任務可以移到前臺,或退至後臺
(c)針對一些沒有程序關閉了但沒有正確釋放內存,導致系統越來越慢等,android引入了一個新的機制, 生命周期(Life Cycle)
安卓面試