摘抄了好多人的部落格,自己的一點認識。希望小夥伴們指點。
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,然後傳給下一個接收者。