安卓基礎工具分析與實踐
接下來一段時間,我決定把安卓的常用基礎工具做一個總結。以便給讀者一些啟示,算是拋磚引玉,或者是對自己研究心得的記錄吧。(格式寫的亂,讀者自行腦補分段吧。。。)
1. 一個問題:安卓native層開發為什麼可以用較少行程式碼實現一些複雜的業務邏輯操作?
對於這個問題,有些人可能覺得並不是,像Android中的AudioFlinger模組,太冗長、囉嗦,類之間的關係巨複雜了!還有OMXCodec編解碼相關的內容也是繞的雲裡來霧裡去!
2. 待介紹的內容
今天,我對於Audio的native框架、音視訊編解碼這些較上層的框架相關內容,暫且不做介紹,而是要介紹再下一層的東西。這一層,是在bionic之上,具體業務(像音視訊編解碼框架,audio框架)之下的一層,為公共基礎庫,可以被各個模組使用。
實現路徑為system/core/libcutils/,標頭檔案路徑為system/core/include/utils/,編譯出的庫為libutils.so。
可以看到安卓多媒體中介軟體的原始檔基本上都包含了這些標頭檔案:#include <utils/xxx.h>,並且makefile都連結了這個庫libutils.so。
3. 問題答案
上面問題的答案,就是“封裝”!
4.為什麼
上層的業務開發工作基於這些被嚴格測試和驗證了的基礎工具來展開,可以快速高效實現具體業務邏輯,把我們的精力和焦點放在具體業務邏輯上,而不是二者同時考慮。
一個通俗易懂的比喻,我們目標是造一輛山地車,主要精力是拿各個廠商的零件去組織裝配就可以了,例如拿Shimano的變速器,拿米其林的輪胎等等。相反,另外一種做法不可取:山地車商又組織一批人力去攻克變速器和輪胎技術。
再有一個例子是,光刻機巨頭ASML也不是每樣東西都研究,像光學鏡頭這種東西也不得不從Carl Zeiss採購,NASA的哈珀望遠鏡的鏡頭也是讓Carl Zeiss幫定製的。這個沒辦法,光學鏡頭人家研究了一兩百年,自己短時間突擊肯定達不到別人的高度。
這也體現了國際分工和全球化作用,那就是做自己最擅長的事情——業務聚焦。
5.具體介紹細節
回到這個問題點,可以這麼說,只有把基礎工具的實現原理了解清楚,上層業務開發才更快速和高效,而不用再從造輪子開始做起。讀android中一些模組的實現,我們也不會因呼叫邏輯不清楚而暈頭轉向了。
接下來呢,我將利用幾篇文章來介紹相關工具,並利用demo來驗證這些工具。這些工具介紹都是基於Android4.4版本,demo都會上傳至我的github倉庫。
這些工具內容涉及執行緒類、原子操作、互斥鎖、RefBase、容器類、堆疊呼叫、sharebuffer、hash類等等。以及應用於多媒體部分的更上一層的封裝,像ALooper/AMessage/AHandler訊息機制模型。
6.個人期望
我的目標讓讀者明白兩點:如何實現 + 如何用。
。。。。。。
今天太晚了,就先寫到這