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