天天看點

面試知識點-四大元件

摘抄了好多人的部落格,自己的一點認識。希望小夥伴們指點。

Android的四大元件是哪些,它們的作用?

 一、Activity:Activity是Android程式與使用者互動的視窗,是Android構造塊中最基本的一種。Android功能:繪制頁面、加載資源檔案,完成功能邏輯,資料處理。

        Activity的生命周期:啟動Activity  onCreate()->onStart()->onResume()

                                          Activity退居背景:目前Activity轉到新的Activity界面或按Home鍵回到主屏(不在棧頂):onPause()—>onStop(),進入停滞狀态。

                                        Activity傳回前台:onRestart()—>onStart()—>onResume(),再次回到運作狀态,這時沒有建立新的Activity。

                                         Activity退居背景,且系統記憶體不足,系統會殺死這個背景狀态的Activity(此時這個Activity引用仍然處在任務棧中,隻是這個時候引用指向的對象已經為null),若再次回到這個Activity,則會走onCreate()–>onStart()—>onResume()(将重新走一次Activity的初始化生命周期)

                                      鎖屏:

onPause()->onStop()

                                      解鎖:

onStart()->onResume()

二、

service:背景服務于Activity,封裝有一個完整的功能邏輯實作,接受上層指令,完成相關的事物,定義好需要接受的Intent提供同步和異步的接口

服務一般分為兩種:

1:本地服務, Local Service 用于應用程式内部。在Service可以調用Context.startService()啟動,調用Context.stopService()結束。 在内部可以調用Service.stopSelf() 或 Service.stopSelfResult()來自己停止。無論調用了多少次startService(),都隻需調用一次 stopService()來停止。

context.startService() ->onCreate()- >onStartCommand()->Service running--調用context.stopService() ->onDestroy()       

2:遠端服務, Remote Service 用于android系統内部的應用程式之間。可以定義接口并把接口暴露出來,以便其他應用進行操作。用戶端建立到服務對象的連接配接,并通過那個連接配接來調用服 務。調用Context.bindService()方法建立連接配接,并啟動,以調用 Context.unbindService()關閉連接配接。多個用戶端可以綁定至同一個服務。如果服務此時還沒有加載,bindService()會先加 載它。

提供給可被其他應用複用,比如定義一個天氣預報服務,提供與其他應用調用即可。

context.bindService()->onCreate()->onBind()->Service running--調用>onUnbind() -> onDestroy() 

      
同一服務,多次啟動,服務實際執行的過程
第一次 啟動服務時,運作 onCreate -->onStartCommand

後面在啟動服務時,服務隻執行onStartCommand

在實際使用過程中,通過Intent 傳遞資料,在OnStartCommand中執行。
      

三、 Content Provider:是Android提供的第三方應用資料的通路方案,可以派生Content Provider類,對外提供資料,可以像資料庫一樣進行選擇排序,屏蔽内部資料的存儲細節,向外提供統一的借口模型,大大簡化上層應用,對資料的整合提供了更友善的途徑

ContentProvider:為存儲和擷取資料提供統一的接口,可以在不同的應用程式之間共享資料。

android内置的許多資料都是使用ContentProvider形式,供開發者調用的 (如視訊,音頻,圖檔,通訊錄等)。

1. 使用表的形式來組織資料

- 無論資料來源是什麼,ContentProvider都會認為是一種表。(把資料組織成表格)

2. 提供的方法

- query:查詢

- insert:插入

- update:更新

- delete:删除

- getType:得到資料類型

- onCreate:建立資料時調用的回調函數

3. 公共的URI

- 每個ContentProvider都有一個公共的URI,這個URI用于表示這個ContentProvider所提供的資料。

- Android所提供的ContentProvider都存放在android.provider包當中。

4. 對比分析

雖然使用其他方法也可以對外共享資料,但資料通路方式會因資料存儲的方式而不同。

- 采用檔案方式對外共享資料,需要進行檔案操作讀寫資料;

- 采用sharedpreferences共享資料,需要使用sharedpreferences API讀寫資料。

- 使用ContentProvider共享資料的好處是統一了資料通路方式。

四、BroadCast Receiver:接受一種或者多種Intent作觸發事件,接受相關消息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型

廣播被分為兩種不同的類型:“普通廣播(Normal broadcasts)”和“有序廣播(Ordered broadcasts)”。普通廣播是完全異步的,可以在同一時刻(邏輯上)被所有廣播接收者接收到,消息傳遞的效率比較高,但缺點是:接收者不能将處理結果傳遞給下一個接收者,并且無法終止廣播Intent的傳播;然而有序廣播是按照接收者聲明的優先級别(聲明在intent-filter元素的android:priority屬性中,數越大優先級别越高,取值範圍:-1000到1000。也可以調用IntentFilter對象的setPriority()進行設定),被接收者依次接收廣播。如:A的級别高于B,B的級别高于C,那麼,廣播先傳給A,再傳給B,最後傳給C。A得到廣播後,可以往廣播裡存入資料,當廣播傳給B時,B可以從廣播中得到A存入的資料。

   Context.sendBroadcast()

   發送的是普通廣播,所有訂閱者都有機會獲得并進行處理。

   Context.sendOrderedBroadcast()

   發送的是有序廣播,系統會根據接收者聲明的優先級别按順序逐個執行接收者,前面的接收者有權終止廣播(BroadcastReceiver.abortBroadcast()),如果廣播被前面的接收者終止,後面的接收者就再也無法擷取到廣播。對于有序廣播,前面的接收者可以将處理結果存放進廣播Intent,然後傳給下一個接收者。