Ⅰ C11鏂扮壒鎬т箣鏅鴻兘鎸囬拡
紼嬪簭閮芥槸鍦ㄥ爢涓婂瓨鍌ㄥ姩鎬佸垎閰嶅硅薄錛岃屽畠鐨勭敓瀛樻湡鏄鐢辯▼搴忔潵鎺у埗鐨勩傝繖灝辨剰鍛崇潃褰撳姩鎬佸硅薄涓嶅啀浣跨敤鐨勬椂鍊欙紝鎴戜滑闇瑕佹樉寮忕殑灝嗗畠閿姣併
c98鎻愬嚭浜嗕竴涓鏅鴻兘鎸囬拡auto_ptr涓轟簡閬垮厤浜轟滑浣跨敤鎸囬拡鏃跺繕璁伴噴鏀懼唴瀛樸備絾鏄鍥犱負auto_ptr鐨勬繪葷己鐐癸紝浣誇漢浠鍦ㄥ紑鍙戣繃紼嬬板埌浜嗗悇縐嶅潙錛屾墍浠ユ墠鏈変簡c11鏂扮殑涓変釜鏅鴻兘鎸囬拡銆
縐誨姩璇涔夋槸c11鎻愬嚭鐨勶紝c11鏈澶х殑鐗規у氨鏄鎷ユ湁浜嗙Щ鍔ㄨ屼笉鏄鎷瘋礉瀵硅薄鐨勮兘鍔涳紝榪欏氨澶у箙搴︾殑鎻愬崌浜嗘ц兘銆
涓轟簡璁╄嚜瀹氫箟綾誨瀷鐨勫硅薄涔熸敮鎸佺Щ鍔ㄦ搷浣滐紝鎴戜滑涓哄畠瀹氫箟浜 縐誨姩鏋勯犲嚱鏁 鍜 縐誨姩璧嬪艱繍綆楃 銆
縐誨姩鏋勯犲嚱鏁版槸瀵硅祫婧愯繘琛岀獌鍙栬屼笉鏄鎷瘋礉銆傚畠鐨勭涓涓鍙傛暟鏄璇ョ被綾誨瀷鐨勫彸鍊煎紩鐢錛岀Щ鍔ㄦ瀯閫犲嚱鏁伴櫎浜嗗畬鎴愯祫婧愮Щ鍔ㄥ栵紝榪樺繀欏諱繚璇佺Щ鍔ㄤ箣鍚庣殑鍘熷硅薄澶勪簬 鏈夋晥鐨勩佸彲鏋愭瀯 鐨勭姸鎬侊紙灝嗗師瀵硅薄鍊艱祴鍊肩粰鏂板硅薄錛岀劧鍚庢妸鍘熷硅薄灞炴у肩疆絀猴紝鐗瑰埆鏄鎸囬拡鎴愬憳緗絀猴紒閭d箞姝ゆ椂鍘熷硅薄灝辨槸澶勪簬鍙鏋愭瀯鐨勫畨鍏ㄧ姸鎬侊級銆
鐪嬩簡memory閲岀殑閮ㄥ垎婧愮爜錛屽彂鐜版湁涓涓鍦╟11涔嬪墠娌℃湁鍑虹幇榪囩殑鍏抽敭瀛梕xplict
鏈変簡explict鍏抽敭瀛楃殑闄愬畾錛岄槻姝㈢被鏋勯犲嚱鏁拌繘琛岄殣寮忚漿鎹
瀹冪佹㈡嫹璐濊涔夛紝浣嗘槸鏄閫氳繃縐誨姩璇涔夛紙浠涔堟槸縐誨姩璇涔夛紵涓婇潰鏈夎В絳旓級鏉ュ疄鐜扮殑銆傚畠鈥滃敮涓鈥濇嫢鏈夊畠鎵鎸囩殑瀵硅薄銆
浠庝笅闈㈢殑unique_ptr鐨勬瀯閫犲嚱鏁板氨鍙浠ュ彂鐜板畠鏄紱佹㈡嫹璐濊涔夌殑銆
浣嗘槸濡傛灉鎯寵佸垏鎹㈡寚閽堢殑鎺у埗鏉冿紝鍙浠ヤ嬌鐢ㄤ笅闈㈢殑縐誨姩鏋勯犲嚱鏁版潵榪涜屾帶鍒舵潈鐨勮漿鍖栵紝榪欓噷鐢ㄥ埌forward杞鍙戱紙涓婁竴鑺傚彲浠ョ煡閬揻orward杞鍙戝彲浠ヨ繑鍥炶ュ弬鏁版湰鏉ュ瑰簲鐨勭被鍨嬬殑寮曠敤錛夛紝鍏跺疄榪欓噷灝辨槸鎶婂彸鍊煎硅薄縐誨姩緇欏乏鍊礆紝騫朵笖鎶婂彸鍊煎硅薄緗絀
浜嗚В浜嗗墠闈㈢殑auto_ptr鍜寀nique_ptr錛屽啀鏉ョ悊瑙shared_ptr闈炲父瀹規槗銆
涓庡墠闈涓よ呬笉鍚岀殑鏄錛宻hared_ptr鍏佽稿氫釜鎸囬拡鎸囧悜鐩稿悓瀵硅薄錛屽墠涓よ呭湪鍒囨崲鎺у埗鏉冩椂錛屼細灝嗗墠闈㈢殑娓呴櫎錛岃宻hared_ptr涓嶄細銆
褰撳垹闄ゅ叾涓涓涓鏅鴻兘鎸囬拡鏃訛紝鍙﹀栦袱涓騫朵笉浼氬彈鍒板彉鍖栥傚洜涓烘ゆ椂鍐呭瓨涓瀛樺湪鐫寮曠敤璁℃暟錛屾瘡娣誨姞涓涓猻hared_ptr錛屽紩鐢ㄨ℃暟+1錛屾瘡嬈¤皟鐢ㄦ瀽鏋勫嚱鏁幫紝寮曠敤璁℃暟-1銆傜洿鍒板紩鐢ㄨ℃暟鍑忎負0錛屾墠浼氶噴鏀捐ュ潡鍐呭瓨銆
auto_ptr鍜寀nique_ptr閮藉彲浠ラ氳繃move鍑芥暟杞鎹㈡垚shared_ptr綾誨瀷
褰撲嬌鐢╯hared_ptr鏃訛紝鏈闇瑕佹敞鎰忕殑灝辨槸 閬垮厤寰鐜寮曠敤 錛屽畠浼氶犳垚鍫嗗唴瀛樻棤娉曟e父閲婃斁錛屽嚭鐜板唴瀛樻硠闇層傚備綍瑙e喅榪欎釜闂棰樺憿錛岃繖鏃跺欏氨瑕佺敤鍒皐eak_ptr鐨刲ock()閿
鎴戜滑鏈濂藉湪浣跨敤weak_ptr璁塊棶瀵硅薄鏃訛紝浣跨敤lock()鍑芥暟錛屽畠鍙浠ユ嫻媤eak_ptr璁塊棶鐨勫硅薄鏄鍚﹀瓨鍦錛屽傛灉瀛樺湪錛岃繑鍥炰竴涓鍐呭瓨涓鐨剆hared_ptr瀵硅薄錛屼笉瀛樺湪錛岃繑鍥炰竴涓猲ullptr鐨剆hared_ptr
褰撳弻鍚戦摼琛ㄧ殑鍓嶉┍鎸囬拡鍜屽悗緇ф寚閽堜嬌鐢ㄤ簡shared_pre錛屽備笅
鐢變簬浣跨敤浜唖hared_pre錛屼竴鍧楀唴瀛樼┖闂存湁涓や釜瀵硅薄榪涜岀$悊錛岃屾棤娉曚嬌寮曠敤璁℃暟涓0錛岄偅涔堢紪璇戝櫒灝辨棤娉曡嚜鍔ㄩ噴鏀懼唴瀛樸
浣跨敤寮卞紩鐢錛屽急寮曠敤騫朵笉浼氫慨鏀瑰硅薄鐨勫紩鐢ㄨ℃暟錛屼篃灝辨槸寮卞紩鐢ㄥ苟涓嶄細瀵瑰硅薄鐨勫唴瀛樿繘琛岀$悊銆備絾鏄瀹冭兘媯嫻嬪埌寮曠敤瀵硅薄鏄鍚﹁閲婃斁錛岄伩鍏嶄簡鍐呭瓨娉勯湶銆倃eak_pre灝辨槸寮卞紩鐢ㄣ
Ⅱ Android系統源代碼情景分析的網友評論
強大的羅大師,感謝你的Android之旅,我已看完你的6篇教程,雖然我還不太懂,但是我相信你就是我打開它的那把鑰匙,再次感謝你的教程。
——mutex_js
老羅,寫的太精彩啦!不僅僅是在Android 按鍵機制方面令人受益匪淺,給我在學習其他模塊上也提供了一套很好的分析思路。非常感謝!
——yuleslie
看你的文章,收獲很多,分析得很透徹,思路清晰,前後呼應,成系統,對我幫助很大,非常感謝你的無私奉獻!
——kenen2006
你的博客給了我一種非常刺激的體驗,讓我更深層次地認識Android。非常感謝你的講解,太棒了!
——stevenhu_223
我真的想放棄這個行業,可我看到你的博客,讓我看到了希望,讓我充滿了信心和堅定!
——zhudeqing
看過幾本Andriod方面的書,但還真比不上這里的博客。羅老師的Linux內核知識及對軟體架構的知識積累用功很深,代碼閱讀能力也很強!膜拜!
——herodie
我是看你的博客開始學Android的,寫的真的太好了。每一個系列都自成一體,無需其他參考。從頂到下都能串到一起,這樣看起來最痛快了!
——hellowolrd
本人語言功底也不是很好,所以系統學習Android也經歷了不少困難。3個多月了,反反復復閱讀你的博文;每一次都有進步,每一次的進步也都有不同的方向。謝謝!技術的道路上真沒有捷徑,更不可以偷懶。我將不懈努力!謝謝博主,期待您能出書!
——tankai19880619
剛看到老羅的這篇新作,還挺熱乎的。忍不住分N口氣讀完,膜拜!讀完後,有些有意思的想法,從文章本身來看,很精彩。這篇文章老羅至少說明了一下問題:
1. 兩種最典型的使用場景及他們的區別(UI相關與否);
2. 引出來兩種線程消息處理模型;
3. 用實例解釋兩種模型是如何使用的;
4. 最後介紹兩種模型的是怎樣實現的。
該文章不但告訴我們what(該文的主旨)、how (怎樣使用),還有why(怎麼實現)。
偶的神,一篇文章里寫了這么多,還能寫的這么清楚。不容易啊!
——rambo2188
太牛了!我是一個剛從事Android開發的新人,你的文章真是入木三分,讀了很有啟發,你的這種分析Android方式很棒!為了造福更多的Android學習者,建議你出書!
——yang105
我覺得也許學習這些知識並不算難,可是要做到時刻有一個清晰的思路去學並且能夠把學過東西用通俗易懂的話語表達出來挺難的。必盡自身知識有限,有些東西可能一下子無法深刻理解。樓主是怎麼做到的呢?感覺樓主的每篇文章都講的精練透徹,主要是能把問題全講出來。我想樓主的知識面一定很廣!
——wantianpei
前言
雖然Android系統自2008年9月發布第一個版本1.0以來,2011年10月發布最新版本4.0,一共存在十多個版本,但是據官方統計,截至2012年3月5日,占據首位的是Android 2.3,市場佔有率達到66.5%;其次是Android 2.2,市場佔有率為25.3%;第三位是Android 2.1,市場佔有率為6.6%;而最新發布的Android 3.2和Android 4.0的市場佔有率只有3.3%和2%。因此,在本書中,我們選擇了Android 2.3的源代碼來分析Android系統的實現,一是因為它的基礎架構是最穩定的;二是因為它是使用最廣泛的。
本書內容
全書分為初識Android系統篇、Android專用驅動系統篇和Android應用程序框架篇三個部分。
初識Android系統篇包含三個章節的內容,主要介紹Android系統的基礎知識。第1章介紹與Android系統有關的參考書籍,以及Android源代碼工程環境的搭建方法;第2章介紹Android系統的硬體抽象層;第3章介紹Android系統的智能指針。讀者可能會覺得奇怪,為什麼一開始就介紹Android系統的硬體抽象層呢?因為涉及硬體,它似乎是一個深奧的知識點。其實不然,Android系統的硬體抽象層無論是從實現上,還是從使用上,它的層次都是非常清晰的,而且從下到上涵蓋了整個Android系統,包括Android系統在用戶空間和內核空間的實現。內核空間主要涉及硬體驅動程序的編寫方法,而用戶空間涉及運行時庫層、應用程序框架層及應用程序層。因此,盡早學習Android系統的硬體抽象層,有助於我們從整體上去認識Android系統,以便後面可以更好地分析它的源代碼。在分析Android系統源代碼的過程中,經常會碰到智能指針,第3章我們就重點分析Android系統智能指針的實
現原理,也是為了後面可以更好地分析Android系統源代碼。
Android專用驅動系統篇包含三個章節的內容。我們知道,Android系統是基於Linux內核來開發的,但是由於移動設備的CPU和內存配置都要比PC低,因此,Android系統並不是完全在Linux內核上開發的,而是在Linux內核裡面添加了一些專用的驅動模塊來使它更適合於移動設備。這些專用的驅動模塊同時也形成了Android系統的堅實基礎,尤其是Logger日誌驅動程序、Binder進程間通信驅動程序,以及Ashmem匿名共享內存驅動程序,它們在Android系統中被廣泛地使用。在此篇中,我們分別在第4章、第5章和第6章分析Logger日誌系統、Binder進程間通信系統和Ashmem共享內存系統的實現原理,為後面深入分析Android應用程序的框架打下良好的基礎。
Android應用程序框架篇包含十個章節的內容。我們知道,在移動平台中,Android系統、iOS系統和Windows Phone系統正在形成三足鼎立之勢,誰的應用程序更豐富、質量更高、用戶體驗更好,誰就能取得最終的勝利。因此,每個平台都在盡最大努力吸引第三方開發者來為其開發應用程序。這就要求平台必須提供良好的應用程序架構,以便第三方開發者可以將更多的精力集中在應用程序的業務邏輯上,從而開發出數量更多、質量更高和用戶體驗更好的應用程序。在此篇中,我們將從組件、進程、消息和安裝四個維度來分析Android應用程序的實現框架。第7章到第10章分析Android應用程序四大組件Activity、Service、Broadcast Receiver和Content Provider的實現原理;第11章和第12章分析Android應用程序進程的啟動過程;第13章到第15章分析Android應用程序的消息處理機制;第16章分析Android應用程序的安裝和顯示過程。學習了這些知識之後,我們就可以掌握Android系統的精髓了。
本書特點
本書從初學者的角度出發,結合具體的使用情景,在縱向和橫向上對Android系統的源代碼進行了全面、深入、細致的分析。在縱向上,採用從下到上的方式,分析的源代碼涉及了Android系統的內核層(Linux Kernel)、硬體抽象層(HAL)、運行時庫層(Runtime)、應用程序框架層(Application Framework)以及應用程序層(Application),這有利於讀者從整體上掌握Android系統的架構。在橫向上,從Android應用程序的組件、進程、消息以及安裝四個角度出發,全面地剖析了Android系統的應用程序框架層,這有利於讀者深入地理解Android應用程序的架構以及運行原理。
Ⅲ Android有什麼好的技術點適合進行技術分享
進程間通信的Binder機制。FrameWork 層的核心。
JNI 的使用。FrameWork 層的基石,幾乎整個 FrameWork 層都是通過 JNI 實現對 Library 層調用的。
Material Design 設計。傳說中設計師導向型的 UI 風格。
OpenGL ES 3.1 ,Android 5.0開始提供 Java 介面和原生支持。
低功耗藍牙(貌似從4.3開始支持)。
Android 5.0提供的 JobScheler API。允許通過為系統定義要在以後的某個時間或特定條件下非同步運行的任務,優化電池壽命。
Zygote 進程。FrameWork 層的祖宗,所有的 app 進程以及系統服務進程都是 zygote fork 出來的。不然怎麼會叫 zygote 呢。
Android Netd。Android 中網路守護進程,通過封裝各種底層協議,隔離底層網路介面的差異,給 FrameWork 層提供統一介面服務。
Vold: Volume Daemon, 用於管理和控制 Android 平台外部存儲設備的後台進程,這些管理和控制,包括 SD 卡的插拔事件檢測、 SD 卡掛載、卸載、格式化等。
Rild: Radio Interface Layer Daemon, 用於智能手機的通信管理和控制的後台進程,所有和手機通信相關的功能,例如接打電話、收發簡訊/彩信、 GPRS 等都需要 Rild 的參與。
Surface 系統。你會明白 Activity 是如何完成界面繪制的。
有 Zygote fork 出來的 SystemServer 。Android 中幾乎所有的核心服務(ActivityManagerService、WindowManagerService 等)都存在於 SystemServer 中。
智能指針。所有 Android 源碼剖析的書必講的一個。