編輯:Android開發教程
這裡歸納寫一個android網絡框架的一般性原理:
Http網絡請求原理
學過《計算機網絡》的應該都知道http是一種應用層協議,它通過tcp實現了可靠的數據傳輸,能夠保證數據的完整性、正確性,而tcp對於數據傳輸控制的優點也能夠體現在http上,使得http的數據傳輸吞吐量、效率得到保證。
對於移動開發來說,網絡應用基本上都是C/S架構,也就是客戶端/服務器架構。客戶端通過向服務器發起特定的請求,服務器返回結果,客戶端解析結果,再將結果展示在UI上。
詳細的交互流程有如下幾步:
客戶端執行網絡請求,從URL中解析出服務器的主機名
將服務器的主機名轉換成服務器的IP地址
將端口號從URL中解析出來
建立一條客戶端與web服務器的tcp連接
客戶端通過輸出流向服務器發送一條http請求
服務器向客戶端會送一條http響應報文
客戶端從輸入流獲取報文
客戶端解析報文,關閉連接
客戶端將結果顯示在UI上
android中執行網絡請求的方式有兩種:httpclient、httpurlconnection,其實網絡框架也主要是基於此做一些功能擴展和封裝。
生產者消費者模式
早晨我在看java並發的時候發現,其實一般性的android
網絡框架就是一個典型的生產者-消費者模式。我不太了解服務端,我覺得服務端在處理客戶端的並發請求時也
對應著一個典型的生產者-消費者模式。(僅是思考,不太成熟)。這裡不會細講並發這塊內容,後續的博客會有一個專題專門來講解並發相關的內容。
客戶端請求多個mobileapi,對應著多個任務,然後多個任務會進入一個緩沖區,多個網絡執行的線程會去並發的處理這個緩沖區中的任務。典型的生產者消費者模式。
更多精彩內容:http://www.bianceng.cn/OS/extra/
BlockingQueue可用於充當共享內存緩沖區,用於維護請求任務隊列。
BlockingQueue就類似一個“意見箱”。它之所以適合作為數據共享的通道,是java並發包中一個比較重要的類,具體如何實現的大家可以下去研究。這裡就不講了。它常和ThreadPoolExecutor 結合使用。
BlockingQueue是用於實現生產者和消費者的一個不錯的選擇。但是BlockingQueue並不是一個高性能的實現。更深入的我還在研究中,這裡先止於此。
命令模式
命令模式的特點就是:讓命令發送者和命令接受者之間解耦,此外,命令模式可以增加一個命令的隊列,支持對命令進行撤銷。這個模型明顯和android網絡框架一一對應,android網絡框架也支持對命令的撤銷。
這裡不會詳解命令模式,之前的設計模式系列博客已經講過這塊內容,可以去翻看前面的博客。
支持擴展
對於android網絡框架來說,可能的擴展性方向是什麼呢?應該是可以支持多種格式的請求:如String、xml、json等等。如何設計這塊的擴展性,各個網絡框架的設計殊途同歸。
異步和回調(Callback)
網絡請求肯定是異步的,但是網絡請求執行結束後,你需要把執行的結果告訴異步任務執行者,這個時候就需要回調了。不過回調也只是一種方案而已。
更多資料:
http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
http://quinnhe.iteye.com/blog/2192940
http://www.jianshu.com/p/3141d4e46240
日前Mozilla公司推出了Android平台的新版Firefox Beta版浏覽器,相比於現在的正式版Firefox,Beta版中除了新增了一系列的新設定以及新選項之外
Google馬上就要正式發布Android 4.4 KitKat了。據我們現在所知,一些新的用戶界面預示著這次的操作系統將有一些新的改變,比如說重新設計的電話應用,比如說
一.圖示android是基於linux的,和我們通常認為的windows不同。它的文件結構和linux類似,因此它的根目錄是/,然後之下是:1. mnt:掛載點目錄,sd
1.1.1 SurfaceComposerClient圖 11?28 每個應用程序在SurfaceFlinger中都對應一個ClientSurfaceFlinger運行於