安卓四大組件簡單總結


 Android 開發的四大組件分別是:

活動(activity),用於表現功能;

服務(service),后台運行服務,不提供界面呈現;

廣播接受者(Broadcast Receive),勇於接收廣播;

內容提供者(Content Provider),支持多個應用中存儲和讀取數據,相當於數據庫

1.活動(activity)
(1)定義:
Activity是Android的四大組件之一。是用戶操作的可視化界面;它為用戶提供了一個完成操作指令的窗口。
當我們創建完畢Activity之后,需要調用setContentView()方法來完成界面的顯示;
以此來為用戶提供交互的入口。在Android App 中只要能看見的幾乎都要依托於Activity,所以Activity是在開發中使用最頻繁的一種組件。 (2)一個Activity通常就是一個單獨的屏幕(窗口)。 (3)Activity之間通過Intent進行通信。 (4)android應用中每一個Activity都必須要在AndroidManifest.xml配置文件中聲明,否則系統將不識別也不執行該Activity。
在android stdio會自動生成,但eclipse需要自己手動添加 (5)Activity的生命周期 在Android中會維持一個Activity Stack(Activity棧),當一個新的Activity創建時,它就會放到棧頂,這個Activity就處於運行狀態。
當再有一個新的Activity被創建后,會重新壓人棧頂,而之前的Activity則會在這個新的Activity底下,就像槍梭壓入子彈一樣。而且之前的Activity就會進入后台。 一個Activity實質上有四種狀態: a.運行中(Running/Active):這時Activity位於棧頂,是可見的,並且可以用戶交互。 b.暫停(Paused):當Activity失去焦點,不能跟用戶交互了,但依然可見,就處於暫停狀態。
當一個新的非全屏的Activity或者一個透明的Activity放置在棧頂,Activity就處於暫停狀態;
這個時候Activity的各種數據還被保持着;只有在系統內存在極低的狀態下,系統才會自動的去銷毀Activity。 c.停止(Stoped):當一個Activity被另一個Activity完全覆蓋,或者點擊HOME鍵退入了后台,這時候Activity處於停止狀態。
這里有些是跟暫停狀態相似的:這個時候Activity的各種數據還被保持着;當系統的別的地方需要用到內容時,系統會自動的去銷毀Activity。 d.銷毀(Detroyed):當我們點擊返回鍵或者系統在內存不夠用的情況下就會把Activity從棧里移除銷毀,被系統回收,這時候,Activity處於銷毀狀態。 2.服務(Service) service(服務)是安卓中的四大組件之一,它通常用作在后台處理耗時的邏輯,與Activity一樣,它存在自己的生命周期,也需要在AndroidManifest.xml配置相關信息。 服務(Service)是Android中實現程序后台運行的解決方案,它非常適合去執行那些不需要和用戶交互而且還要求長期運行的任務。
服務的運行不依賴於任何用戶界面,即使程序被切換到后台,或者用戶打開了另外一個應用程序,服務仍然能夠保持正常運行。 不過需要注意的是,服務並不是運行在一個獨立的進程當中的,而是依賴於創建服務時所在的應用程序進程。
與某個應用程序進程被殺掉時,所有依賴於該進程的服務也會停止運行。另外.也不要被服務的后台概念所迷惑,實際上服務並不會自動開啟線程,
所有的代碼都是默認運行在主線程當中的。也就是說,我們需要在服務的內部手動創建子線程,並在這里執行具體的任務,否則就有可能出現主線程被阻塞住的情況。 (1)service用於在后台完成用戶指定的操作。service分為兩種: (a)started(啟動):當應用程序組件(如activity)調用startService()方法啟動服務時,服務處於started狀態。 (b)bound(綁定):當應用程序組件調用bindService()方法綁定到服務時,服務處於bound狀態。 (2)startService()與bindService()區別: (a)started service(啟動服務)是由其他組件調用startService()方法啟動的,這導致服務的onStartCommand()方法被調用。
當服務是started狀態時,其生命周期與啟動它的組件無關,並且可以在后台無限期運行,即使啟動服務的組件已經被銷毀。
因此,服務需要在完成任務后調用stopSelf()方法停止,或者由其他組件調用stopService()方法停止。 (b)使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。 (3)開發人員需要在應用程序配置文件中聲明全部的service,使用
<service></service>標簽。 (4)Service通常位於后台運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。
Service組件需要繼承Service基類。Service組件通常用於為其他組件提供后台服務或監控其他組件的運行狀態。
定義 Service是一個專門在后台處理長時間任務的Android組件,它沒有UI。它有兩種啟動方式,startService和bindService。 這兩種啟動方式的區別: startService只是啟動Service,啟動它的組件(如Activity)和Service並沒有關聯,只有當Service調用stopSelf或者其他組件調用stopService服務才會終止。 bindService方法啟動Service,其他組件可以通過回調獲取Service的代理對象和Service交互,
而這兩方也進行了綁定,當啟動方銷毀時,Service也會自動進行unBind操作,當發現所有綁定都進行了unBind時才會銷毀Service。
可能會出現的一些常用方法:----------------- Service的onCreate回調函數可以做耗時的操作嗎? 不可以, Service的onCreate是在主線程(ActivityThread)中調用的,耗時操作會阻塞UI 如果需要做耗時的操作,你會怎么做? 線程和Handler方式
在什么場景下使用IntentService? IntentService相比父類Service而言,最大特點是其回調函數onHandleIntent中可以直接進行耗時操作,不必再開線程。
其原理是IntentService的成員變量 Handler在初始化時已屬於工作線程,之后handleMessage,包括onHandleIntent等函數都運行在工作線程中。 如果對IntentService的了解僅限於此,會有種IntentService很雞肋的觀點,因為在Service中開線程進行耗時操作也不麻煩。
我當初也是這個觀點,所以很少用IntentService。 但是IntentService還有一個特點,就是多次調用onHandleIntent函數(也就是有多個耗時任務要執行),多個耗時任務會按順序依次執行。
原理是其內置的Handler關聯了任務隊列,Handler通過looper取任務執行是順序執行的。 這個特點就能解決多個耗時任務需要順序依次執行的問題。而如果僅用service,開多個線程去執行耗時操作,就很難管理。 3.廣播接收者(Broadcast Receive) 在Android中,廣播是一種廣泛運用的在應用程序之間傳輸信息的機制。而廣播接收器是對發送出來的廣播進行過濾接受並響應的一類組件。
可以使用廣播接收器來讓應用對一個外部時間做出響應。例如,當電話呼入這個外部事件到來時,可以利用廣播接收器進行處理。當下載一個程序成功完成時,
仍然可以利用廣播接收器進行處理。廣播接收器不NotificationManager來通知用戶這些事情發生了。廣播接收器既可以在AndroidManifest.xml中注冊,
也可以在運行時的代碼中使用Context.registerReceive()進行注冊。只要是注冊了,當事件來臨時,即使程序沒有啟動,系統也在需要的時候啟動程序。
各種應用還可以通過使用Context.sendBroadcast()將它們自己的Intent廣播給其他應用程序。 (1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。
廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice來響應它們收到的信息,或者用NotificationManager來通知用戶。
通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。 (2)廣播接收者的注冊有兩種方法,分別是程序動態注冊(在運行時的代碼中使用Context.registerReceive()進行注冊)和AndroidManifest文件中進行靜態注冊。 (3)動態注冊廣播接收器特點是當用來注冊的Activity關掉后,廣播也就失效了。靜態注冊無需擔憂廣播接收器是否被關閉,
只要設備是開啟狀態,廣播接收器也是打開着的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。 4.內容提供者(Content Provider) (1)android平台提供了Content Provider使一個應用程序的指定數據集提供給其他應用程序。
其他應用可以通過ContentResolver類從該內容提供者中獲取或存入數據。 (2)只有需要在多個應用程序間共享數據是才需要內容提供者。
例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處是統一數據訪問方式。 (3)ContentProvider實現數據共享。ContentProvider用於保存和獲取數據,並使其對所有應用程序可見。
這是不同應用程序間共享數據的唯一方式,因為android沒有提供所有應用共同訪問的公共存儲區。 (4)開發人員不會直接使用ContentProvider類的對象,大多數是通過ContentResolver對象實現對ContentProvider的操作。 (5)ContentProvider使用URI來唯一標識其數據集,這里的URI以content://作為前綴,表示該數據由ContentProvider來管理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM