Android四大組件詳解【Android專題3】

      網友投稿 675 2022-05-29

      Android四大組件詳解

      Android四大組件分別為activity、service、content provider、broadcast receiver。

      1、activity

      Activity 類是應用程序整個生命周期的重要組成部分,Activity 的啟動和組合方式是平臺應用程序模型的基本部分。

      activity是用戶可以做的單一、集中的事情。幾乎所有 Activity 都與用戶交互,因此 Activity 類負責為您創建一個窗口,您可以在其中放置帶有 setContentView(View). 雖然活動通常以全屏窗口的形式呈現給用戶,但它們也可以以其他方式使用:作為浮動窗口(通過R.attr.windowIsFloating設置的主題)、 多窗口模式或嵌入到其他窗口中。幾乎所有 Activity 的子類都會實現兩種方法:

      onCreate(Bundle)是您初始化活動的地方。最重要的是,在這里您通常會setContentView(int) 使用定義 UI 的布局資源進行調用,并使用它findViewById(int) 來檢索該 UI 中您需要以編程方式與之交互的小部件。

      onPause()是您處理用戶暫停與活動的主動交互的地方。此時應提交用戶所做的任何更改(通常是 ContentProvider保存數據)。在這種狀態下,活動仍然在屏幕上可見。

      要與 一起使用Context.startActivity(),所有活動類都必須 在其包的AndroidManifest.xml.

      一個活動基本上有四種狀態:

      如果一個活動在屏幕的前景中(在最頂層堆棧的最高位置),它是活動的或running。這通常是用戶當前正在與之交互的活動。

      如果一個 Activity 失去焦點但仍然呈現給用戶,它是 可見的。如果一個新的非全尺寸或透明 Activity 焦點位于您的 Activity 之上,另一個 Activity 在多窗口模式下具有更高的位置,或者 Activity 本身在當前窗口模式下不可聚焦,則可能是這種情況。這樣的活動是完全活躍的(它維護所有狀態和成員信息并保持與窗口管理器的聯系)。

      如果一個活動被另一個活動完全遮擋,它就會被停止或隱藏。它仍然保留所有狀態和成員信息,但是,它不再對用戶可見,因此它的窗口是隱藏的,當其他地方需要內存時,它通常會被系統殺死。

      系統可以通過要求它完成或簡單地終止其進程,使其銷毀來從內存中刪除活動。當它再次顯示給用戶時,它必須完全重新啟動并恢復到以前的狀態。

      下圖顯示了 Activity 的重要狀態路徑。方形矩形代表您可以實現的回調方法,以便在 Activity 在狀態之間移動時執行操作。彩色橢圓是 Activity 可以處于的主要狀態。

      Android四大組件詳解【Android專題3】

      (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組件通常用于為其他組件提供后臺服務或監控其他組件的運行狀態。

      總結:不需要和用戶交互,負責后臺任務,比如播放音樂,socket長連接

      3、content provider

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

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

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

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

      (5)ContentProvider使用URI來唯一標識其數據集,這里的URI以content://作為前綴,表示該數據由ContentProvider來管理。

      總結:負責數據存取,常用于APP進數據共享,跨進程數據存取等....比如讀取相冊,讀取聯系人,都是ContentProvider來實現的

      4、broadcast receiver

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

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

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

      (4)Android還有一套本地廣播機制,就是為了解決廣播的安全問題,因為系統全局廣播可以被其他任何程序接收到,一些攜帶關鍵性數據的廣播就可能被其他應用程序截獲。而本地廣播機制發出的廣播只能在應用程序的內部進行傳遞,并且只能接收來自本應用程序的廣播,這樣就不存在安全問題了。

      (5)Android在8.0以后,為了提高效率,刪除了靜態注冊,防止關閉App后廣播還在,造成內存泄漏。現在靜態注冊的廣播需要指定包名,而動態注冊就沒有這個問題。并且,無論是靜態注冊廣播還是動態注冊廣播,在接收廣播的時候都不能攔截廣播,否則會報錯。 谷歌官網的原文是:應用無法使用其清單注冊大部分隱式廣播。不過,是不能對大部分的廣播進行注冊,但還是有些廣播可以進行靜態注冊的,比如對接收Android開機的廣播通過靜態注冊還是能夠正常接收的。

      總結:負責頁面間通信,系統和APP通信,APP和APP通信,比如監聽網絡連接狀態變化,就是通過BroadcastReceiver廣播接收者來實現的

      5、Intent介紹

      Intent是Android系統用來抽象描述要執行的一個操作,也可以在不同組件之間進行溝通和消息傳遞。 顯式的Intent就是你已經知道要啟動的組件名稱,比如某個Activity的包名和類名,在Intent中明確的指定了這個組件(Activity),一般來說這種Intent經常用在一個應用中,因為你已經明確的知道要啟動的組件名稱。 隱式的Intent就是你不知道要啟動的組件名稱,只知道一個Intent動作要執行,比如:拍照,錄像,查看地圖。一般來說這種Intent用在不同的應用之間傳遞信息。

      Android

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【產品】產品平面設計:Photoshop、Illustrator和InDesign工具區別
      下一篇:【設計模式面試】結構性設計模式你清楚幾個?
      相關文章
      亚洲一本到无码av中文字幕| 久久久久亚洲精品成人网小说| 精品国产日韩亚洲一区| 亚洲AV一区二区三区四区| 亚洲国产超清无码专区| 亚洲欧洲一区二区| 亚洲中文字幕无码爆乳AV| 亚洲日韩国产成网在线观看| 国产一区二区三区亚洲综合| 亚洲AV综合永久无码精品天堂| 亚洲另类无码专区首页| 亚洲乱码日产精品一二三| 亚洲人av高清无码| 亚洲欧好州第一的日产suv| 狠狠色伊人亚洲综合网站色| 亚洲综合一区二区三区四区五区| 亚洲人成综合网站7777香蕉| 亚洲精品第一综合99久久| 亚洲AV无码无限在线观看不卡 | 亚洲成AV人片久久| 亚洲av无码片区一区二区三区| 亚洲va乱码一区二区三区| 在线亚洲高清揄拍自拍一品区| 亚洲中文无码卡通动漫野外| 亚洲国产精品18久久久久久| 亚洲精品色在线网站| 亚洲毛片不卡av在线播放一区| 国产精品V亚洲精品V日韩精品 | 亚洲国产成人久久综合一区77| 亚洲av无码专区在线观看素人| 亚洲精品NV久久久久久久久久| 亚洲成a人片在线观看老师| 亚洲综合最新无码专区| 亚洲乱码日产一区三区| 亚洲国产精品久久66| 亚洲成人福利网站| 亚洲中文字幕无码中文字| 国产精品亚洲专区在线播放| 久久亚洲中文字幕精品一区四| 精品亚洲永久免费精品| 亚洲黄色免费电影|