首先要明確的是應(yīng)用二字,因?yàn)锳ndroid應(yīng)用只是Android系統(tǒng)的一部分,所以我們要搞清楚開發(fā)的只是安卓系統(tǒng)的應(yīng)用層。
Android 應(yīng)用采用 Java 編程語言編寫。Android SDK 工具將您的代碼 — 連同任何數(shù)據(jù)和資源文件 — 編譯到一個(gè) APK:Android 軟件包,即帶有 .apk 后綴的存檔文件中。一個(gè) APK 文件包含 Android 應(yīng)用的所有內(nèi)容,它是基于 Android 系統(tǒng)的設(shè)備用來安裝應(yīng)用的文件。
當(dāng)apk安裝到安卓系統(tǒng)中后(應(yīng)用會(huì)現(xiàn)在系統(tǒng)中注冊(cè)),每個(gè)應(yīng)該都是運(yùn)行在自己的安全沙箱中的:
- 每個(gè)android應(yīng)用都是運(yùn)行在自己獨(dú)立的虛擬機(jī)中的,與其他應(yīng)用是隔絕的,每個(gè)虛擬機(jī)都運(yùn)行在單獨(dú)的進(jìn)程中
- 默認(rèn)情況下,每個(gè)應(yīng)用都只能訪問執(zhí)行其工作所需的組件,而不能訪問其他組件
Android 系統(tǒng)設(shè)計(jì)的獨(dú)特之處在于,任何應(yīng)用都可以啟動(dòng)其他應(yīng)用的組件。但是
由于系統(tǒng)在單獨(dú)的進(jìn)程中運(yùn)行每個(gè)應(yīng)用,且其文件權(quán)限會(huì)限制對(duì)其他應(yīng)用的訪問,因此您的應(yīng)用無法直接啟動(dòng)其他應(yīng)用中的組件, 但 Android 系統(tǒng)卻可以。因此,要想啟動(dòng)其他應(yīng)用中的組件,您必須向系統(tǒng)傳遞一則消息,說明您想啟動(dòng)特定組件的 Intent。 系統(tǒng)隨后便會(huì)為您啟動(dòng)該組件。系統(tǒng)啟動(dòng)某個(gè)組件時(shí),會(huì)啟動(dòng)該應(yīng)用的進(jìn)程(如果尚未運(yùn)行),并實(shí)例化該組件所需的類。此時(shí)這個(gè)應(yīng)用也就隨著啟動(dòng)了,這也是為什么android應(yīng)用沒有像其他應(yīng)用一樣有單一入口(例如main()函數(shù))
note:其實(shí)就是應(yīng)用讓系統(tǒng)去幫他開啟其他應(yīng)用
在這里用到一個(gè)很重要的東西那就是Intent,Intent 是一個(gè)消息傳遞對(duì)象,您可以使用它從其他應(yīng)用組件請(qǐng)求操作。
Intent分為顯式和隱式:
- 顯式 Intent:按名稱(完全限定類名)指定要啟動(dòng)的組件。 通常,您會(huì)在自己的應(yīng)用中使用顯式 Intent 來啟動(dòng)組件,這是因?yàn)槟酪獑?dòng)的 Activity 或服務(wù)的類名。例如,啟動(dòng)新 Activity 以響應(yīng)用戶操作,或者啟動(dòng)服務(wù)以在后臺(tái)下載文件。
- 顯式 Intent:按名稱(完全限定類名)指定要啟動(dòng)的組件。 通常,您會(huì)在自己的應(yīng)用中使用顯式 Intent 來啟動(dòng)組件,這是因?yàn)槟酪獑?dòng)的 Activity 或服務(wù)的類名。例如,啟動(dòng)新 Activity 以響應(yīng)用戶操作,或者啟動(dòng)服務(wù)以在后臺(tái)下載文件。
創(chuàng)建隱式 Intent 時(shí),Android 系統(tǒng)通過將 Intent 的內(nèi)容與在設(shè)備上其他應(yīng)用的清單文件中聲明的 Intent 過濾器進(jìn)行比較,從而找到要啟動(dòng)的相應(yīng)組件。 如果 Intent 與 Intent 過濾器匹配,則系統(tǒng)將啟動(dòng)該組件,并向其傳遞 Intent 對(duì)象。 如果多個(gè) Intent 過濾器兼容,則系統(tǒng)會(huì)顯示一個(gè)對(duì)話框,支持用戶選取要使用的應(yīng)用。