2020-09-25 Android基礎(chǔ)知識(shí)-組件(Activity, Service)

應(yīng)用基礎(chǔ)知識(shí)

每個(gè) Android 應(yīng)用都處于各自的安全沙盒中哑舒,并受以下 Android 安全功能的保護(hù):

  • Android 操作系統(tǒng)是一種多用戶 Linux 系統(tǒng),其中的每個(gè)應(yīng)用都是一個(gè)不同的用戶粱腻;
  • 默認(rèn)情況下,系統(tǒng)會(huì)為每個(gè)應(yīng)用分配一個(gè)唯一的 Linux 用戶 ID(該 ID 僅由系統(tǒng)使用斩跌,應(yīng)用并不知曉)绍些。系統(tǒng)會(huì)為應(yīng)用中的所有文件設(shè)置權(quán)限,使得只有分配給該應(yīng)用的用戶 ID 才能訪問這些文件耀鸦;
  • 每個(gè)進(jìn)程都擁有自己的虛擬機(jī) (VM)柬批,因此應(yīng)用代碼獨(dú)立于其他應(yīng)用而運(yùn)行。
  • 默認(rèn)情況下袖订,每個(gè)應(yīng)用都在其自己的 Linux 進(jìn)程內(nèi)運(yùn)行氮帐。Android 系統(tǒng)會(huì)在需要執(zhí)行任何應(yīng)用組件時(shí)啟動(dòng)該進(jìn)程,然后當(dāng)不再需要該進(jìn)程或系統(tǒng)必須為其他應(yīng)用恢復(fù)內(nèi)存時(shí)洛姑,其便會(huì)關(guān)閉該進(jìn)程上沐。

應(yīng)用組件

Activity

Activity 是與用戶交互的入口點(diǎn),它表示擁有界面的單個(gè)屏幕
每個(gè) Activity 都獨(dú)立于其他 Activity 而存在,在權(quán)限允許的情況下吏口,其他應(yīng)用可以啟動(dòng)其中任何一個(gè) Activity
Activity主要的交互有

  • 追蹤用戶當(dāng)前關(guān)心的內(nèi)容(屏幕上顯示的內(nèi)容)奄容,以確保系統(tǒng)繼續(xù)運(yùn)行托管 Activity 的進(jìn)程。
  • 了解先前使用的進(jìn)程包含用戶可能返回的內(nèi)容(已停止的 Activity)产徊,從而更優(yōu)先保留這些進(jìn)程。
  • 幫助應(yīng)用處理終止其進(jìn)程的情況蜀细,以便用戶可以返回已恢復(fù)其先前狀態(tài)的 Activity舟铜。
  • 提供一種途徑,讓應(yīng)用實(shí)現(xiàn)彼此之間的用戶流奠衔,并讓系統(tǒng)協(xié)調(diào)這些用戶流谆刨。(此處最經(jīng)典的示例是共享。)
個(gè)人理解

Activity構(gòu)成了Android應(yīng)用的用戶界面归斤,與Unity的客戶端類似痊夭,但借助Android的機(jī)制,能夠在不同的Activity脏里,不同的應(yīng)用之間進(jìn)行交互

Service

服務(wù)是一個(gè)通用入口點(diǎn)她我,用于因各種原因使應(yīng)用在后臺(tái)保持運(yùn)行狀態(tài)。它是一種在后臺(tái)運(yùn)行的組件迫横,用于執(zhí)行長(zhǎng)時(shí)間運(yùn)行的操作或?yàn)檫h(yuǎn)程進(jìn)程執(zhí)行作業(yè)番舆。服務(wù)不提供界面。諸如 Activity 等其他組件可以啟動(dòng)服務(wù)矾踱,使該服務(wù)運(yùn)行或綁定到該服務(wù)恨狈,以便與其進(jìn)行交互。綁定服務(wù)之所以能運(yùn)行呛讲,原因是某些其他應(yīng)用(或系統(tǒng))已表示希望使用該服務(wù)禾怠。從根本上講返奉,這是為另一個(gè)進(jìn)程提供 API 的服務(wù)。因此吗氏,系統(tǒng)會(huì)知曉這些進(jìn)程之間存在依賴關(guān)系芽偏,所以如果進(jìn)程 A 綁定到進(jìn)程 B 中的服務(wù),系統(tǒng)便知道自己需使進(jìn)程 B(及其服務(wù))為進(jìn)程 A 保持運(yùn)行狀態(tài)牲证。此外哮针,如果進(jìn)程 A 是用戶關(guān)心的內(nèi)容,系統(tǒng)隨即也知道將進(jìn)程 B 視為用戶關(guān)心的內(nèi)容坦袍。由于存在靈活性(無論好壞)十厢,服務(wù)已成為非常有用的構(gòu)建塊,并且可實(shí)現(xiàn)各種高級(jí)系統(tǒng)概念捂齐。動(dòng)態(tài)壁紙蛮放、通知偵聽器、屏幕保護(hù)程序奠宜、輸入方法包颁、無障礙功能服務(wù)以及眾多其他核心系統(tǒng)功能均可構(gòu)建為在其運(yùn)行時(shí)由應(yīng)用實(shí)現(xiàn)、系統(tǒng)綁定的服務(wù)

BroadCastReceiver

借助廣播接收器組件压真,系統(tǒng)能夠在常規(guī)用戶流之外向應(yīng)用傳遞事件娩嚼,從而允許應(yīng)用響應(yīng)系統(tǒng)范圍內(nèi)的廣播通知。由于廣播接收器是另一個(gè)明確定義的應(yīng)用入口滴肿,因此系統(tǒng)甚至可以向當(dāng)前未運(yùn)行的應(yīng)用傳遞廣播岳悟。例如,應(yīng)用可通過調(diào)度提醒來發(fā)布通知泼差,以告知用戶即將發(fā)生的事件贵少。而且,通過將該提醒傳遞給應(yīng)用的廣播接收器堆缘,應(yīng)用在提醒響起之前即無需繼續(xù)運(yùn)行滔灶。許多廣播均由系統(tǒng)發(fā)起,例如吼肥,通知屏幕已關(guān)閉录平、電池電量不足或已拍攝照片的廣播。應(yīng)用也可發(fā)起廣播潜沦,例如萄涯,通知其他應(yīng)用某些數(shù)據(jù)已下載至設(shè)備,并且可供其使用唆鸡。盡管廣播接收器不會(huì)顯示界面涝影,但其可以創(chuàng)建狀態(tài)欄通知在發(fā)生廣播事件時(shí)提醒用戶。但廣播接收器更常見的用途只是作為通向其他組件的通道争占,旨在執(zhí)行極少量的工作燃逻。

個(gè)人理解

通過應(yīng)用的BroadCastReceiver序目,使應(yīng)用能夠接受來自其他應(yīng)用或者系統(tǒng)的消息,并且能夠在狀態(tài)欄等地方展示伯襟。它多用于通知與提醒方面猿涨。

ContentProvider

內(nèi)容提供程序管理一組共享的應(yīng)用數(shù)據(jù),您可以將這些數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)姆怪、SQLite 數(shù)據(jù)庫(kù)叛赚、網(wǎng)絡(luò)中或者您的應(yīng)用可訪問的任何其他持久化存儲(chǔ)位置。其他應(yīng)用可通過內(nèi)容提供程序查詢或修改數(shù)據(jù)(如果內(nèi)容提供程序允許)稽揭。我們很容易將內(nèi)容提供程序看作數(shù)據(jù)庫(kù)上的抽象俺附,因?yàn)槠鋬?nèi)置的大量 API 和支持時(shí)常適用于這一情況。但從系統(tǒng)設(shè)計(jì)的角度看溪掀,二者的核心目的不同事镣。對(duì)系統(tǒng)而言,內(nèi)容提供程序是應(yīng)用的入口點(diǎn)揪胃,用于發(fā)布由 URI 架構(gòu)識(shí)別的已命名數(shù)據(jù)項(xiàng)璃哟。因此,應(yīng)用可以決定如何將其包含的數(shù)據(jù)映射到 URI 命名空間喊递,進(jìn)而將這些 URI 分發(fā)給其他實(shí)體

個(gè)人理解

應(yīng)用的存儲(chǔ)組件随闪,負(fù)責(zé)管理共享的應(yīng)用數(shù)據(jù)。在ContentProvider允許的情況下骚勘,能夠讓其他應(yīng)用查詢與修改數(shù)據(jù)蕴掏。ContentProvider也適用于私有數(shù)據(jù)

啟動(dòng)組件

在四種組件類型中,有三種(Activity调鲸、服務(wù)和廣播接收器)均通過異步消息 Intent 進(jìn)行啟動(dòng)。Intent 會(huì)在運(yùn)行時(shí)對(duì)各個(gè)組件進(jìn)行互相綁定挽荡∶晔可以將 Intent 視為從其他組件請(qǐng)求操作的信使
使用Intent對(duì)象創(chuàng)建intent
對(duì)于Activity和Service,Intent 可能會(huì)傳達(dá)對(duì) Activity 的請(qǐng)求,可以通過啟動(dòng) Activity 來接收結(jié)果定拟,這樣 Activity 還會(huì)返回 Intent中的結(jié)果
對(duì)于BroadCastReceiver于微,Intent 只會(huì)定義待廣播的通知。例如青自,指示設(shè)備電池電量不足的廣播只包含指示“電池電量不足”的已知操作字符串
對(duì)于ContentProvider株依,Content會(huì)在成為ContentResolver的目標(biāo)時(shí)啟動(dòng)

AndroidManifast.xml

在 Android 系統(tǒng)啟動(dòng)應(yīng)用組件之前,系統(tǒng)必須通過讀取應(yīng)用的清單文件 (AndroidManifest.xml) 確認(rèn)組件存在,應(yīng)用必須在此文件中聲明其所有組件延窜,該文件必須位于應(yīng)用項(xiàng)目目錄的根目錄中
除了聲明應(yīng)用的組件外恋腕,清單文件還有許多其他作用,如:

  • 確定應(yīng)用需要的任何用戶權(quán)限逆瑞,如互聯(lián)網(wǎng)訪問權(quán)限或?qū)τ脩袈?lián)系人的讀取權(quán)限
  • 聲明應(yīng)用使用或需要的硬件和軟件功能荠藤,如相機(jī)伙单、藍(lán)牙服務(wù)或多點(diǎn)觸摸屏幕
  • 根據(jù)應(yīng)用使用的 API,聲明應(yīng)用所需的最低API級(jí)別
  • 聲明應(yīng)用需要鏈接的 API 庫(kù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哈肖,一起剝皮案震驚了整個(gè)濱河市吻育,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淤井,老刑警劉巖布疼,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異币狠,居然都是意外死亡游两,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門总寻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器罐,“玉大人,你說我怎么就攤上這事渐行『浞唬” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我锨天,道長(zhǎng)预厌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任哩至,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘站蝠。我一直安慰自己,他們只是感情好卓鹿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布菱魔。 她就那樣靜靜地躺著,像睡著了一般吟孙。 火紅的嫁衣襯著肌膚如雪澜倦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天杰妓,我揣著相機(jī)與錄音藻治,去河邊找鬼。 笑死巷挥,一個(gè)胖子當(dāng)著我的面吹牛桩卵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼吸占,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晴叨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矾屯,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤兼蕊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后件蚕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孙技,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年排作,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牵啦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妄痪,死狀恐怖哈雏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衫生,我是刑警寧澤裳瘪,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站罪针,受9級(jí)特大地震影響彭羹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泪酱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一派殷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧墓阀,春花似錦毡惜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吮成,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辜梳,已是汗流浹背粱甫。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留作瞄,地道東北人茶宵。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宗挥,于是被迫代替她去往敵國(guó)和親乌庶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种蝶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348