[Android開發(fā)]--Android的四大組件概述

Android 開發(fā)的四大組件分別是:活動(dòng)(activity)让网,用于表現(xiàn)功能;服務(wù)(service)溃睹,后臺(tái)運(yùn)行服務(wù)因篇,不提供界面呈現(xiàn);廣播接受者(Broadcast Receive)竞滓,勇于接收廣播;內(nèi)容提供者(Content Provider)汽烦,支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù)莉御,相當(dāng)于數(shù)據(jù)庫。

一牍颈、活動(dòng)(activity)

定義:

Activity是Android的四大組件之一琅关。是用戶操作的可視化界面;它為用戶提供了一個(gè)完成操作指令的窗口画机。當(dāng)我們創(chuàng)建完畢Activity之后新症,需要調(diào)用setContentView()方法來完成界面的顯示;以此來為用戶提供交互的入口荚醒。在Android App 中只要能看見的幾乎都要依托于Activity隆嗅,所以Activity是在開發(fā)中使用最頻繁的一種組件。

(1)一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕(窗口)泡躯。

(2)Activity之間通過Intent進(jìn)行通信。

(3)android應(yīng)用中每一個(gè)Activity都必須要在AndroidManifest.xml配置文件中聲明精续,否則系統(tǒng)將不識(shí)別也不執(zhí)行該Activity粹懒。在android stdio會(huì)自動(dòng)生成凫乖,但eclipse需要自己手動(dòng)添加。

(4)Activity的生命周期:
在Android中會(huì)維持一個(gè)Activity Stack(Activity棧)帽芽,當(dāng)一個(gè)新的Activity創(chuàng)建時(shí)导街,它就會(huì)放到棧頂,這個(gè)Activity就處于運(yùn)行狀態(tài)搬瑰。當(dāng)再有一個(gè)新的Activity被創(chuàng)建后,會(huì)重新壓人棧頂泽论,而之前的Activity則會(huì)在這個(gè)新的Activity底下,就像槍梭壓入子彈一樣缚够。而且之前的Activity就會(huì)進(jìn)入后臺(tái)鹦赎。
一個(gè)Activity實(shí)質(zhì)上有四種狀態(tài):
a、運(yùn)行中(Running/Active):這時(shí)Activity位于棧頂毯辅,是可見的煞额,并且可以用戶交互。
b胀莹、暫停(Paused):當(dāng)Activity失去焦點(diǎn)婚温,不能跟用戶交互了,但依然可見,就處于暫停狀態(tài)篱竭。當(dāng)一個(gè)新的非全屏的Activity或者一個(gè)透明的Activity放置在棧頂步绸,Activity就處于暫停狀態(tài);這個(gè)時(shí)候Activity的各種數(shù)據(jù)還被保持著吕喘;只有在系統(tǒng)內(nèi)存在極低的狀態(tài)下刑桑,系統(tǒng)才會(huì)自動(dòng)的去銷毀Activity。
c闻察、停止(Stoped):當(dāng)一個(gè)Activity被另一個(gè)Activity完全覆蓋琢锋,或者點(diǎn)擊HOME鍵退入了后臺(tái),這時(shí)候Activity處于停止?fàn)顟B(tài)钮热。這里有些是跟暫停狀態(tài)相似的:這個(gè)時(shí)候Activity的各種數(shù)據(jù)還被保持著烛芬;當(dāng)系統(tǒng)的別的地方需要用到內(nèi)容時(shí),系統(tǒng)會(huì)自動(dòng)的去銷毀Activity仆潮。
d遣臼、銷毀(Detroyed):當(dāng)我們點(diǎn)擊返回鍵或者系統(tǒng)在內(nèi)存不夠用的情況下就會(huì)把Activity從棧里移除銷毀,被系統(tǒng)回收鹏浅,這時(shí)候屏歹,Activity處于銷毀狀態(tài)。

二季希、服務(wù)(Service)

定義:

Service(服務(wù))是安卓中的四大組件之一,它通常用作在后臺(tái)處理耗時(shí)的邏輯博敬,與Activity一樣峰尝,它存在自己的生命周期,也需要在AndroidManifest.xml配置相關(guān)信息囚枪。Service是一個(gè)專門在后臺(tái)處理長時(shí)間任務(wù)的Android組件劳淆,它沒有UI默赂。它有兩種啟動(dòng)方式缆八,startService和bindService。

這兩種啟動(dòng)方式的區(qū)別:

startService只是啟動(dòng)Service奈辰,啟動(dòng)它的組件(如Activity)和Service并沒有關(guān)聯(lián),只有當(dāng)Service調(diào)用stopSelf或者其他組件調(diào)用stopService服務(wù)才會(huì)終止吊趾。
bindService方法啟動(dòng)Service瑟啃,其他組件可以通過回調(diào)獲取Service的代理對(duì)象和Service交互蛹屿,而這兩方也進(jìn)行了綁定,當(dāng)啟動(dòng)方銷毀時(shí)错负,Service也會(huì)自動(dòng)進(jìn)行unBind操作犹撒,當(dāng)發(fā)現(xiàn)所有綁定都進(jìn)行了unBind時(shí)才會(huì)銷毀Service。

服務(wù)(Service)是Android中實(shí)現(xiàn)程序后臺(tái)運(yùn)行的解決方案崭庸,它非常適合去執(zhí)行那些不需要和用戶交互而且還要求長期運(yùn)行的任務(wù)。服務(wù)的運(yùn)行不依賴于任何用戶界面执赡,即使程序被切換到后臺(tái)函筋,或者用戶打開了另外一個(gè)應(yīng)用程序,服務(wù)仍然能夠保持正常運(yùn)行首懈。

不過需要注意的是谨敛,服務(wù)并不是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程當(dāng)中的,而是依賴于創(chuàng)建服務(wù)時(shí)所在的應(yīng)用程序進(jìn)程最仑。與某個(gè)應(yīng)用程序進(jìn)程被殺掉時(shí)炊甲,所有依賴于該進(jìn)程的服務(wù)也會(huì)停止運(yùn)行。另外.也不要被服務(wù)的后臺(tái)概念所迷惑吟吝,實(shí)際上服務(wù)并不會(huì)自動(dòng)開啟線程颈娜,所有的代碼都是默認(rèn)運(yùn)行在主線程當(dāng)中的。也就是說炕贵,我們需要在服務(wù)的內(nèi)部手動(dòng)創(chuàng)建子線程野崇,并在這里執(zhí)行具體的任務(wù),否則就有可能出現(xiàn)主線程被阻塞住的情況鳖轰。

(1)service用于在后臺(tái)完成用戶指定的操作扶镀。service分為兩種:
a、started(啟動(dòng)):當(dāng)應(yīng)用程序組件(如activity)調(diào)用startService()方法啟動(dòng)服務(wù)時(shí)昆雀,服務(wù)處于started狀態(tài)。
b揩懒、bound(綁定):當(dāng)應(yīng)用程序組件調(diào)用bindService()方法綁定到服務(wù)時(shí)挽封,服務(wù)處于bound狀態(tài)。

(2)startService()與bindService()區(qū)別:
a辅愿、started service(啟動(dòng)服務(wù))是由其他組件調(diào)用startService()方法啟動(dòng)的智亮,這導(dǎo)致服務(wù)的onStartCommand()方法被調(diào)用。當(dāng)服務(wù)是started狀態(tài)時(shí)点待,其生命周期與啟動(dòng)它的組件無關(guān)阔蛉,并且可以在后臺(tái)無限期運(yùn)行,即使啟動(dòng)服務(wù)的組件已經(jīng)被銷毀亦鳞。因此馍忽,服務(wù)需要在完成任務(wù)后調(diào)用stopSelf()方法停止棒坏,或者由其他組件調(diào)用stopService()方法停止燕差。
b、使用bindService()方法啟用服務(wù)坝冕,調(diào)用者與服務(wù)綁定在了一起徒探,調(diào)用者一旦退出喂窟,服務(wù)也就終止测暗,大有“不求同時(shí)生,必須同時(shí)死”的特點(diǎn)磨澡。

(3)開發(fā)人員需要在應(yīng)用程序配置文件中聲明全部的service碗啄,使用<service></service>標(biāo)簽。

(4)Service通常位于后臺(tái)運(yùn)行稳摄,它一般不需要與用戶交互稚字,因此Service組件沒有圖形用戶界面。Service組件需要繼承Service基類厦酬。Service組件通常用于為其他組件提供后臺(tái)服務(wù)或監(jiān)控其他組件的運(yùn)行狀態(tài)胆描。

三、廣播接受者(Broadcast Receive)

定義:

在Android中仗阅,廣播是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制昌讲。而廣播接收器是對(duì)發(fā)送出來的廣播進(jìn)行過濾接受并響應(yīng)的一類組件〖踉耄可以使用廣播接收器來讓應(yīng)用對(duì)一個(gè)外部時(shí)間做出響應(yīng)短绸。例如车吹,當(dāng)電話呼入這個(gè)外部事件到來時(shí),可以利用廣播接收器進(jìn)行處理醋闭。當(dāng)下載一個(gè)程序成功完成時(shí)礼搁,仍然可以利用廣播接收器進(jìn)行處理。廣播接收器不NotificationManager來通知用戶這些事情發(fā)生了目尖。廣播接收器既可以在AndroidManifest.xml中注冊(cè)馒吴,也可以在運(yùn)行時(shí)的代碼中使用Context.registerReceive()進(jìn)行注冊(cè)。只要是注冊(cè)了瑟曲,當(dāng)事件來臨時(shí)饮戳,即使程序沒有啟動(dòng),系統(tǒng)也在需要的時(shí)候啟動(dòng)程序洞拨。各種應(yīng)用還可以通過使用Context.sendBroadcast()將它們自己的Intent廣播給其他應(yīng)用程序扯罐。

(1)你的應(yīng)用可以使用它對(duì)外部事件進(jìn)行過濾,只對(duì)感興趣的外部事件(如當(dāng)電話呼入時(shí)烦衣,或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí))進(jìn)行接收并做出響應(yīng)歹河。廣播接收器沒有用戶界面。然而花吟,它們可以啟動(dòng)一個(gè)activity或serice來響應(yīng)它們收到的信息秸歧,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力衅澈,例如閃動(dòng)背燈键菱、震動(dòng)、播放聲音等今布。一般來說是在狀態(tài)欄上放一個(gè)持久的圖標(biāo)经备,用戶可以打開它并獲取消息。

(2)廣播接收者的注冊(cè)有兩種方法部默,分別是程序動(dòng)態(tài)注冊(cè)(在運(yùn)行時(shí)的代碼中使用Context.registerReceive()進(jìn)行注冊(cè))和AndroidManifest文件中進(jìn)行靜態(tài)注冊(cè)侵蒙。

(3)動(dòng)態(tài)注冊(cè)廣播接收器特點(diǎn)是當(dāng)用來注冊(cè)的Activity關(guān)掉后,廣播也就失效了傅蹂。靜態(tài)注冊(cè)無需擔(dān)憂廣播接收器是否被關(guān)閉纷闺,只要設(shè)備是開啟狀態(tài),廣播接收器也是打開著的贬派。也就是說哪怕app本身未啟動(dòng)急但,該app訂閱的廣播在觸發(fā)時(shí)也會(huì)對(duì)它起作用。

四搞乏、內(nèi)容提供者(Content Provider)

定義:

android平臺(tái)提供了Content Provider使一個(gè)應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序波桩。其他應(yīng)用可以通過ContentResolver類從該內(nèi)容提供者中獲取或存入數(shù)據(jù)。

(1)只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者请敦。例如镐躲,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用储玫,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中。它的好處是統(tǒng)一數(shù)據(jù)訪問方式萤皂。

(2)ContentProvider實(shí)現(xiàn)數(shù)據(jù)共享撒穷。ContentProvider用于保存和獲取數(shù)據(jù),并使其對(duì)所有應(yīng)用程序可見裆熙。這是不同應(yīng)用程序間共享數(shù)據(jù)的唯一方式端礼,因?yàn)閍ndroid沒有提供所有應(yīng)用共同訪問的公共存儲(chǔ)區(qū)。

(3)開發(fā)人員不會(huì)直接使用ContentProvider類的對(duì)象入录,大多數(shù)是通過ContentResolver對(duì)象實(shí)現(xiàn)對(duì)ContentProvider的操作蛤奥。

(4)ContentProvider使用URI來唯一標(biāo)識(shí)其數(shù)據(jù)集,這里的URI以content://作為前綴僚稿,表示該數(shù)據(jù)由ContentProvider來管理凡桥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蚀同,隨后出現(xiàn)的幾起案子缅刽,更是在濱河造成了極大的恐慌,老刑警劉巖蠢络,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衰猛,死亡現(xiàn)場離奇詭異,居然都是意外死亡谢肾,警方通過查閱死者的電腦和手機(jī)腕侄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門小泉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芦疏,“玉大人,你說我怎么就攤上這事微姊∷彳睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵兢交,是天一觀的道長薪捍。 經(jīng)常有香客問我,道長配喳,這世上最難降的妖魔是什么酪穿? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮晴裹,結(jié)果婚禮上被济,老公的妹妹穿的比我還像新娘。我一直安慰自己涧团,他們只是感情好只磷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布经磅。 她就那樣靜靜地躺著,像睡著了一般钮追。 火紅的嫁衣襯著肌膚如雪预厌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天元媚,我揣著相機(jī)與錄音轧叽,去河邊找鬼。 笑死刊棕,一個(gè)胖子當(dāng)著我的面吹牛犹芹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞠绰,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腰埂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜈膨?” 一聲冷哼從身側(cè)響起屿笼,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翁巍,沒想到半個(gè)月后驴一,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灶壶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肝断,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驰凛。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胸懈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恰响,到底是詐尸還是另有隱情趣钱,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布胚宦,位于F島的核電站首有,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枢劝。R本人自食惡果不足惜井联,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一卖陵、第九天 我趴在偏房一處隱蔽的房頂上張望祷肯。 院中可真熱鬧敏储,春花似錦滤淳、人聲如沸逛拱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怎茫。三九已至,卻和暖如春蝗锥,著一層夾襖步出監(jiān)牢的瞬間跃洛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工终议, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汇竭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓穴张,卻偏偏與公主長得像细燎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皂甘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354