第一部分目錄:
第一章 快速入門
- 安裝工具
- 再見Hello World
- 模擬器(或真機)運行
- 其他步驟
- 常用快捷鍵
第二章 重要概念
- 總覽
- 構(gòu)件
- 前臺只能有一個應(yīng)用
- 安全保障
重要概念:
1.總覽
我們先來看看Android的系統(tǒng)架構(gòu)圖染厅。
Android系統(tǒng)架構(gòu)圖
說明:
(1)Linux內(nèi)核
Linux內(nèi)核為Android提供了硬件抽象層,讓Android能夠移植到各種平臺上脓杉。在內(nèi)部糟秘,Android使用Linux來提供內(nèi)存管理、進程管理球散、聯(lián)網(wǎng)和其他操作系統(tǒng)服務(wù)尿赚。Android用戶根本看不到Linux,而程序員往往也不會直接使用Linux調(diào)用蕉堰。但作為開發(fā)人員必須直到Linux的而存在凌净。
(2)原生層
在內(nèi)核層的上一層是Android原生層,這些共享庫都是使用C或C++編寫的屋讶,針對Android設(shè)備使用的硬件架構(gòu)進行編譯冰寻,并直接由廠商預(yù)裝。以下是最重要的原生庫:
- Surface Manager皿渗。
- 2D和3D圖形斩芭。
- 多媒體編碼解碼器。
- SQL數(shù)據(jù)庫乐疆。
- 瀏覽器引擎划乖。
(3)Android運行時
在內(nèi)核之上還有Android運行時,包括運行環(huán)境和核心Java庫挤土。運行環(huán)境使用Dalvik或ART琴庵,具體使用取決于Android版本。
- Dalvik是Google的Dan Bornstein 設(shè)計并編寫的一款虛擬機。編寫好的代碼會被編譯為獨立于機器的指令(字節(jié)碼)迷殿,然后由移動設(shè)備的Dalvik VM執(zhí)行儿礼。
- ART,即Android Runtime庆寺,是一款超前的編譯器蚊夫。Android 5.0用它取代了Dalvik。相比與Dalvik止邮,ART可以提高程序的運行速度这橙,但代價是安裝時間更長一點。
(4)應(yīng)用框架
在原生層和運行時之上导披,是應(yīng)用框架屈扎。它提供了用于創(chuàng)建應(yīng)用的高級構(gòu)件。這個框架是隨著Android預(yù)安裝的撩匕,可以根據(jù)需要對其進行擴展鹰晨,在其中添加自己的組件。以下是應(yīng)用框架最重要的組成部分:
- 活動管理器止毕。它控制著應(yīng)用的生命周期模蜡,并維護一個用于用戶導(dǎo)航功能的通用后退棧。
- 內(nèi)容提供者扁凛。這些對象封裝了要在應(yīng)用之間共享的數(shù)據(jù)忍疾,如通訊錄等。
- 資源管理器谨朝。資源指的是程序中除代碼以外的其他所有東西卤妒。
- 位置管理器。Android設(shè)備始終知道其自身處何方字币。
- 通知管理器则披。以不唐突的方式將短信、約會洗出、接近提示等事件告知用戶士复。
(5)應(yīng)用和服務(wù)
最頂層的就是應(yīng)用和服務(wù)層。應(yīng)用是可以占據(jù)整個屏幕與用戶進行交互的程序翩活,而服務(wù)則隱匿在用戶的視線之外阱洪,默默地擴展應(yīng)用框架。
2.構(gòu)件
Android應(yīng)用框架提供了大量可用于創(chuàng)建應(yīng)用的構(gòu)件菠镇,而這些構(gòu)件最重要的就是:活動澄峰、片段、視圖辟犀、意圖、服務(wù)和內(nèi)容提供者。以下簡要介紹堂竟,之后會在對應(yīng)章節(jié)中詳細學習:
- 活動(Activity)魂毁,是一個用戶界面屏幕。應(yīng)用可以定義一個或多個活動出嘹,用于處理應(yīng)用程序的不同階段席楚。活動擴展了Context類税稼,因此可使用他們來獲取全局信息烦秩。
- 片段(Fragment),是活動的一個組成部分郎仆,通常顯示在屏幕上只祠,但并非必須如此。通過片段扰肌,能夠使應(yīng)用輕松適應(yīng)不同尺寸屏幕抛寝。
- 視圖(View),是最小的用戶界面單元曙旭,可以直接包含在活動中盗舰,也可以包含在活動的片段中。視圖可以用Java代碼創(chuàng)建桂躏,但更好的方式是使用XML布局來定義钻趋。每中視圖都有其一系列的屬性,它們決定了視圖功能剂习、行為和外觀蛮位。
- 意圖(Intent),是一種行為描述機制(如選擇照片进倍,打電話等)土至。在Android中,幾乎一切都是通過意圖來實現(xiàn)的猾昆,這給我們提供了大量替換或重用組件的機會陶因。
- 服務(wù)(Service),是運行在后臺的任務(wù),無需用戶直接與之交互垂蜗。
- 內(nèi)容提供者楷扬,是一組數(shù)據(jù)和用于讀取它們的自定義API,這是在應(yīng)用之間共享全局數(shù)據(jù)的最好方法贴见。
補充:
關(guān)于使用資源烘苹。資源是本地化的文本字符串、位圖或程序需要的其他非代碼信息片部。你將在項目的res目錄中創(chuàng)建和存儲資源镣衡。Android資源編輯器(aapt)根據(jù)資源文件所屬的文件夾和格式對其進行處理。資源編輯器對資源進行壓縮和打包,再生成一個名為R的類廊鸥,其中包含可以用于在程序中引用這些資源的標識符望浩。
3.前臺只能有一個應(yīng)用
在Android中只有一個前臺應(yīng)用,它通常占據(jù)除狀態(tài)欄以外的整個屏幕惰说。
用戶運行應(yīng)用時磨德,Android會啟動該應(yīng)用并讓它進入前臺。系統(tǒng)的活動管理器會將所有用戶調(diào)用的其他應(yīng)用或應(yīng)用中的其他屏幕都記錄到應(yīng)用棧中吆视。每當用戶按返回按鈕時典挑,都將返回到棧中的前一個屏幕。從用戶角度來看啦吧,著很想Web瀏覽器的歷史記錄您觉,按后退鍵返回到前一個頁面。相關(guān)的知識點如下:
(1) 進程不等于應(yīng)用丰滑。在內(nèi)部顾犹,每個用戶界面屏幕都由一個活動表示。每個活動都有生命周期褒墨。應(yīng)用由一個或多個活動以及包含這些活動的Linux進程組成炫刷。
(2) 活動的生命周期。在生命周期內(nèi)郁妈,Android程序的活動可處于多種狀態(tài)浑玛。開發(fā)人員不能控制程序所處的狀態(tài),這完全由系統(tǒng)管理噩咪。然而顾彰,在狀態(tài)發(fā)生變化前,系統(tǒng)會調(diào)用方法onXXX()來通知開發(fā)人員胃碾。活動的生命周期
說明:
在創(chuàng)建的Acitivity子類時涨享,需要重寫如下方法,Android會在合適的時候調(diào)用它們仆百。
- onCreate(Bundle):活動首次啟動時被調(diào)用厕隧。可以用它來執(zhí)行一次性初始化工作俄周。onCreate()接收一個參數(shù)吁讨,這個參數(shù)要么為null,要么為方法onSaveInstanceState()保存的狀態(tài)信息峦朗。
- onStart():表明活動即將顯示給用戶建丧。
- onResume():活動能夠開始與用戶交互時被調(diào)用。這是啟動動畫和音樂的理想場所波势。
- onPause():在活動即將進入后臺(通常是由于啟動了另一個活動)時被調(diào)用翎朱。應(yīng)該在這個方法中保存程序的持久化狀態(tài)橄维。
- onStop():在活動對用戶不再可見且暫時不需要該活動時被調(diào)用。如果內(nèi)存緊張闭翩,該方法可能不會被調(diào)用(系統(tǒng)可能會直接終止進程)挣郭。
- onRestart():如果該方法被調(diào)用,就表明原本處于停止狀態(tài)的活動重新顯示到屏幕上疗韵。
- onDestroy():在活動銷毀前被調(diào)用。如果內(nèi)存緊張侄非,該方法可能不會被調(diào)用(系統(tǒng)可能會直接終止進程)蕉汪。
- onSaveInstanceState(Bundle):Android調(diào)用這個方法讓活動保存其特有的狀態(tài)。通常不需要重寫該方法逞怨。因為默認實現(xiàn)會自動保存所有用戶界面控件的狀態(tài)者疤。
- onRestoreInstanceState(Bundle):根據(jù) onSaveInstanceState()方法保存的狀態(tài)重新初始化活動時被調(diào)用,其默認實現(xiàn)恢復(fù)用戶界面狀態(tài)叠赦。
不在前臺運行的活動可能會被停止驹马。另外,包含此類活動的Linux進程也可能隨時被終止除秀,以便為新活動騰出空間糯累。在某些情況下,onPause()可能是最后一個被調(diào)用的活動方法册踩,因此對于要保留下次使用的任何數(shù)據(jù)泳姐,都必須在這里進行保存。
(3) 使用片段簡化工作暂吉。片段是應(yīng)用的組成部分胖秒,它們包含在活動中,其生命周期與活動很像慕的。事實上阎肝,很多生命周期方法都是由活動的方法調(diào)用的(如Fragment.onResume()間接地由Activity.onResume()調(diào)用)。片段的生命周期
說明:不存在包含它們的活動時肮街,片段依然可以存在风题。例如,如果你在應(yīng)用運行時旋轉(zhuǎn)屏幕低散,活動通常會被銷毀并重新創(chuàng)建俯邓,以適應(yīng)新的屏幕朝向,但片段通常會被保留熔号。這樣能夠在朝向切換期間保留網(wǎng)絡(luò)連接等重量級對象稽鞭。
4.安全保障
每個應(yīng)用都運行在自己的Linux進程中。硬件禁止一個進程去訪問另一個進程的內(nèi)存引镊。另外朦蕴,每個應(yīng)用都被分配了一個獨特的用戶ID篮条。只要設(shè)備沒有被root以更高的權(quán)限運行,一個應(yīng)用創(chuàng)建的文件就不能被其他應(yīng)用讀寫吩抓。另外涉茧,限制了對一些關(guān)鍵操作的訪問。要使用這些操作疹娶,必須在清單文件中請求相應(yīng)的權(quán)限伴栓。在應(yīng)用安裝時,包管理器將根據(jù)證書授予或不授予請求的權(quán)限雨饺,并在必要時詢問用戶钳垮。下面是常見的權(quán)限:
- INTERNET:訪問Internet。
- READ_CONTACTS:讀取但不寫入用戶的聯(lián)系人數(shù)據(jù)额港。
- WRITE_CONTACTS:寫入但不讀取用戶的聯(lián)系人數(shù)據(jù)饺窿。
- RECEIVE_SMS:監(jiān)視收到的短信。
- ACCESS_COARSE_LOCATION:使用粗糙的位置提供器移斩,如基站或Wi-Fi肚医。
- ACCESS_FINE_LOCATION:使用更精確的位置提供器,如GPS向瓷。
補充:Android甚至可以限制訪問系統(tǒng)的特定部分肠套。通過在清單文件中使用XML標簽、可指定誰可啟動活動风罩、啟動或綁定服務(wù)糠排、向接收器廣播意圖以及訪問內(nèi)容提供器中的數(shù)據(jù)。
題外話:
世界上最快樂的事超升,莫過于為理想而奮斗入宦。——蘇格拉底
為理想而奮斗