標籤:image 驅動 儲存系統 binder機制 成功 簡單的 inf body 深入淺出
從事Android開發已經兩年多了,最近項目上特別清閑,剛開始時在閑暇的時候都不知道幹嘛,整天混日子。有一天突然有個以前同學找到我,說要我幫忙做一個Android的需求,就是在後台截屏(涉及到服務以及跨進程)、頁面控制項監控(也是在後台)、後台服務保活(類似QQ後台);突然發現自己對這行毫無所知,像一個傻子一樣。認真的回顧了這兩年的開發曆程,學到的那些東西差不多都已經過時了,只能滿足簡單的UI搭建,幾乎可以說是毫無所成了。這對一名程式員來說是非常恐怖的,在技術日新的發展中如果還保持這樣的工作態度,那麼很快就要被淘汰了。於是打算從頭開始學Android,好好打好基礎,不再好高騖遠的去學什麼人工智慧什麼Python了,先掌控好手頭的技術;
重溫Android最開始的曆程:從下面這張圖開始
最開始學Android的時候這張圖是死記硬背下來的,也不知道要記下來幹嘛(為了找工作吧),現在回過頭來看慢慢的有了自己的一些認識;
首先Android的架構分為四層 核心層(Linux核心):選擇Linux的原因就是因為他開源,以及適合嵌入式開發;我們可以把手機想象成一大塊電路板(事實上它既是一塊電路板,只是比較精細,複雜),然後Google在這塊電路板上用Linux寫入了一個系統,並對這個定製的系統做了一些改動和增強。那麼Google對這塊帶Linux核心的電路板做了什麼修改呢?
一、Android在Linux系統上做的修改:
1) Goldfish :Goldfish是在模擬器上啟動並執行虛擬CPU,那麼在實際的手機上啟動並執行時候Android對goldfish做了很大的改動,據統計,Android核心對Goldfish的改動主要涉及44個檔案。
2) YAFFS2 (Yet Another Flash File System):由Aleph One公司所發展出來的NAND flash 嵌入式檔案系統;手機主要用到的儲存介質是flash卡,所以必須有一套高效的適合訪問flash的儲存系統,Android對這一系統也做了相應的改動。
3) 調度器(Scheduler)與進程調度和時鐘相關的策略,Android對此方面也做了一些修改;
二 、Android新增的驅動
1)IPC Binder :一種IPC(處理序間通訊)機制;在Android系統的Binder機制中,由四個系統組件組成,分別是Client、Server、Service Manager和Binder驅動程式,其中Client、Server和Service Manager運行在使用者空間,Binder驅動程式運行核心空間。通過Binder將這四個系統元件連線起來實現了遠程調用(RPC),關於Binder的運行機制可以參考這篇文章 Android 深入淺出之binder機制 ;
2)Low Memory Killer:做Android開發的時候沒少為OOM以及服務或者進程被殺死頭疼,主要都是因為行動裝置低記憶體的限制,所以Android設定了這個驅動在系統記憶體低的時候殺死一些進程。啟動並執行機制是在系統記憶體低於某值時,清除相關的程式,保障系統保持擁有一定數量的空閑記憶體。
3)Ashmem: 匿名共用記憶體;這個使得進程間能夠共用大塊的記憶體,其兩個特點一是能夠輔助記憶體管理系統來有效地管理不再使用的記憶體塊,二是它通過Binder處理序間通訊機制來實現進程間的記憶體共用。
4)RAM Console and Log Device:為了調試方便,並加入了log記錄方便分析查看;
5)Android Debug Bridge:Android調試橋 ;通過這個,能利用PC來對行動裝置進行管理,一旦行動裝置和PC串連成功,就能通過adb命令對其進行管理;
三、Android對Linux的增強:
主要包括Alarm(硬體時鐘)、Ashmem(匿名記憶體共用)、Low Memory Killer(低記憶體管理)、Logger(日誌裝置),等等。
Android開發兩年,從頭開始學Android(一)