Android四大组件详解
第一次寫博客,也是第一次接觸安卓,很多格式什么的都不熟悉,如果比較亂還請多多指教。
關注微信公眾號,一起探索
Android四大組件詳解
Android四大組件分別為activity、service、content provider、broadcast receiver。
1、activity
(1)一個Activity通常就是一個單獨的屏幕(窗口)。
(2)Activity之間通過Intent進行通信。
(3)android應用中每一個Activity都必須要在AndroidManifest.xml配置文件中聲明,否則系統將不識別也不執行該Activity。
2、service
(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,使用標簽。
(4)Service通常位于后臺運行,它一般不需要與用戶交互,因此Service組件沒有圖形用戶界面。Service組件需要繼承Service基類。Service組件通常用于為其他組件提供后臺服務或監控其他組件的運行狀態。
3、content provider
(1)android平臺提供了Content Provider使一個應用程序的指定數據集提供給其他應用程序。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入數據。
(2)只有需要在多個應用程序間共享數據是才需要內容提供者。例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。它的好處是統一數據訪問方式。
(3)ContentProvider實現數據共享。ContentProvider用于保存和獲取數據,并使其對所有應用程序可見。這是不同應用程序間共享數據的唯一方式,因為android沒有提供所有應用共同訪問的公共存儲區。
(4)開發人員不會直接使用ContentProvider類的對象,大多數是通過ContentResolver對象實現對ContentProvider的操作。
(5)ContentProvider使用URI來唯一標識其數據集,這里的URI以content://作為前綴,表示該數據由ContentProvider來管理。
4、broadcast receiver
(1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收并做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice來響應它們收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態欄上放一個持久的圖標,用戶可以打開它并獲取消息。
(2)廣播接收者的注冊有兩種方法,分別是程序動態注冊和AndroidManifest文件中進行靜態注冊。
(3)動態注冊廣播接收器特點是當用來注冊的Activity關掉后,廣播也就失效了。靜態注冊無需擔憂廣播接收器是否被關閉,只要設備是開啟狀態,廣播接收器也是打開著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。
(4)Android還有一套本地廣播機制,就是為了解決廣播的安全問題,因為系統全局廣播可以被其他任何程序接收到,一些攜帶關鍵性數據的廣播就可能被其他應用程序截獲。而本地廣播機制發出的廣播只能在應用程序的內部進行傳遞,并且只能接收來自本應用程序的廣播,這樣就不存在安全問題了。
(5)今天了解了Android的靜態注冊和動態注冊,Android在8.0以后,為了提高效率,刪除了靜態注冊,防止關閉App后廣播還在,造成內存泄漏。現在靜態注冊的廣播需要指定包名,而動態注冊就沒有這個問題。并且,無論是靜態注冊廣播還是動態注冊廣播,在接收廣播的時候都不能攔截廣播,否則會報錯。
谷歌官網的原文是:應用無法使用其清單注冊大部分隱式廣播。不過,是不能對大部分的廣播進行注冊,但還是有些廣播可以進行靜態注冊的,比如對接收Android開機的廣播通過靜態注冊還是能夠正常接收的。
5、Intent介紹
Intent是Android系統用來抽象描述要執行的一個操作,也可以在不同組件之間進行溝通和消息傳遞。
顯式的Intent就是你已經知道要啟動的組件名稱,比如某個Activity的包名和類名,在Intent中明確的指定了這個組件(Activity),一般來說這種Intent經常用在一個應用中,因為你已經明確的知道要啟動的組件名稱。
隱式的Intent就是你不知道要啟動的組件名稱,只知道一個Intent動作要執行,比如:拍照,錄像,查看地圖。一般來說這種Intent用在不同的應用之間傳遞信息。
總結
以上是生活随笔為你收集整理的Android四大组件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB拟合函数
- 下一篇: Android四大组件之广播