Android中有四大組件activity、service、content provider、broadcast receiver

android四大組件分別爲activityservicecontent providerbroadcast receiver

一、android四大組件詳解

1activity

1)一個Activity通常就是一個單獨的屏幕(窗口)。

2Activity之間通過Intent進行通信

3android應用中每一個Activity都必須要在AndroidManifest.xml配置文件中聲明,否則系統將不識別也不執行該Activity

activity的啓動模式:

1. standard   默認標準的啓動模式, 每次startActivity都是創建一個新的activity的實例。

              適用於絕大大數情況

2. singleTop  單一頂部,如果要開啓的activity在任務棧的頂部已經存在,就不會創建新的實例,

              而是調用 onNewIntent() 方法。

              應用場景: 瀏覽器書籤。 避免棧頂的activity被重複的創建,解決用戶體驗問題。

3. singletask 單一任務棧 , activity只會在任務棧裏面存在一個實例。如果要激活的activity,在

              任務棧裏面已經存在,就不會創建新的activity,而是複用這個已經存在的activity

              調用 onNewIntent() 方法,並且清空當前activity任務棧上面所有的activity

              應用場景:瀏覽器activity, 整個任務棧只有一個實例,節約內存和cpu的目的

              注意: activity還是運行在當前應用程序的任務棧裏面的。不會創建新的任務棧。

 

4. singleInstance  單態 單例模式

              單一實例,整個手機操作系統裏面只有一個實例存在。不同的應用去打開這個activity

      共享 公用的同一個activity

              他會運行在自己單獨,獨立的任務棧裏面,並且任務棧裏面只有他一個實例存在。

              應用場景:呼叫來電界面 InCallScreen


2service

1service用於在後臺完成用戶指定的操作。service分爲兩種:

astarted(啓動):當應用程序組件(如activity)調用startService()方法啓動服務時,服務處於started狀態。

bbound(綁定):當應用程序組件調用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組件通常用於爲其他組件提供後臺服務或監控其他組件的運行狀態。

android系統進程管理是按照一定的規則的:

   1.應用程序一旦被打開 通常情況下關閉(清空任務棧)後進程不會停止。方面下一次快速啓動。

帶來內存不足的問題。

   2.Android系統有一套內存清理機制。 按照優先級去回收系統的內存。


進程分爲5個等級的優先級:(從高到低)

    1.Foreground process 前臺進程  用戶正在玩的應用程序對應的進程

    2.Visible process 可視進程 用戶仍然可以看到這個進程的界面。

    3.Service process服務進程  應用程序有一個服務組件在後臺運行。

    4.Background process 後臺進程  應用程序沒有服務在運行,並且最小化(activity onstop

    5.Empty process 空進程 沒有任何運行的activity,任務棧空了

3content provider

1android平臺提供了Content Provider使一個應用程序的指定數據集提供給其他應用程序。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入數據

2)只有需要在多個應用程序間共享數據是才需要內容提供者。例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處是統一數據訪問方式。

3ContentProvider實現數據共享ContentProvider用於保存和獲取數據,並使其對所有應用程序可見。這是不同應用程序間共享數據的唯一方式,因爲android沒有提供所有應用共同訪問的公共存儲區。

4)開發人員不會直接使用ContentProvider類的對象,大多數是通過ContentResolver對象實現對ContentProvider的操作。

5ContentProvider使用URI來唯一標識其數據集,這裏的URIcontent://作爲前綴,表示該數據由ContentProvider來管理。

4broadcast receiver

1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啓動一個activityserice來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它並獲取消息。

2)廣播接收者的註冊有兩種方法,分別是程序動態註冊AndroidManifest文件中進行態註冊

3)動態註冊廣播接收器特點是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要設備是開啓狀態,廣播接收器也是打開着的。也就是說哪怕app本身未啓動,該app訂閱的廣播在觸發時也會對它起作用。

android系統下的廣播:

    電池電量低。

    電池充電完畢

    短信到來了

    程序安裝卸載

    sd卡卸載 安裝


二、android四大組件總結:

14大組件的註冊

       4大基本組件都需要註冊才能使用,每個ActivityserviceContent Provider都需要在AndroidManifest文件中進行配置。AndroidManifest文件中未進行聲明的activity、服務以及內容提供者將不爲系統所見,從而也就不可用。而broadcast receiver廣播接收者的註冊分靜態註冊(在AndroidManifest文件中進行配置)和通過代碼動態創建並以調用Context.registerReceiver()的方式註冊至系統。需要注意的是在AndroidManifest文件中進行配置的廣播接收者會隨系統的啓動而一直處於活躍狀態,只要接收到感興趣的廣播就會觸發(即使程序未運行)。

24大組件的激活

內容提供者的激活:當接收到ContentResolver發出的請求後,內容提供者被激活。而其它三種組件activity、服務和廣播接收器被一種叫做intent的異步消息所激活

34大組件的關閉

       內容提供者僅在響應ContentResolver提出請求的時候激活。而一個廣播接收器僅在響應廣播信息的時候激活。所以,沒有必要去顯式的關閉這些組件。Activity關閉:可以通過調用它的finish()方法來關閉一個activity。服務關閉:對於通過startService()方法啓動的服務要調用Context.stopService()方法關閉服務,使用bindService()方法啓動的服務要調用Contex.unbindService()方法關閉服務。

4android中的任務(activity棧)

a)任務其實就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的用戶體驗。棧底的是啓動整個任務的Activity,棧頂的是當前運行的用戶可以交互的Activity,當一個activity啓動另外一個的時候,新的activity就被壓入棧,併成爲當前運行的activity。而前一個activity仍保持在棧之中。當用戶按下BACK鍵的時候,當前activity出棧,而前一個恢復爲當前運行的activity。棧中保存的其實是對象,棧中的Activity永遠不會重排,只會壓入或彈出。

b)任務中的所有activity是作爲一個整體進行移動的。整個的任務(即activity棧)可以移到前臺,或退至後臺。

(c)Android系統是一個多任務(Multi-Task)的操作系統,可以在用手機聽音樂的同時,也執行其他多個程序。每多執行一個應用程序,就會多耗費一些系統內存,當同時執行的程序過多,或是關閉的程序沒有正確釋放掉內存,系統就會覺得越來越慢,甚至不穩定。爲了解決這個問題,Android引入了一個新的機制,即生命週期(Life Cycle)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章