[TOC]
## HttpClient與HttpUrlConnection的區別
推薦而HttpUrlConnection,不推薦HttpClient
共同點:都支持Https協議,都是以流的形式進行上傳或者下載數據,也可以說是以流的形式進行數據的傳輸,還有ipv6,以及連接池等功能。
HttpClient這個擁有非常多的API,所以如果想要進行擴展的話,并且不破壞它的兼容性的話,很難進行擴展,也就是這個原因,Google在Android6.0的時候,直接就棄用了這個HttpClient.
HttpUrlConnection相對來說就是比較輕量級了,API比較少,容易擴展,并且能夠滿足Android大部分的數據傳輸。
volley,在2.3版本以前都是使用HttpClient,在2.3以后就使用了HttpUrlConnection
## Volley VS Okhttp VS Retrofit
Volley:
優點:封裝的更好,擴展性很強
缺點:不支持post大數據,所以不適合上傳文件。
用處:頻繁的、數據量小的網絡請求
Okhttp:
OkHttp的優勢在于性能更高,因為 OkHttp基于NIO(非堵塞式)和Okio ,所以性能上要比 Volley更快。
Retrofit:
基于 OkHttp 而做的封裝,解耦的更徹底
## OKHttp 整體設計
OKHttp3通過攔截鏈的設計,讓請求分成5個攔截器去處理,攔截器各司其職,擴展性非常高。攔截鏈是從自定義的攔截器開始,然后再到默認的5個攔截器。一般情況下我們想打印網絡請求日志,所以可以自定義Log攔截器,如果要給所有請求添加Header,同樣可以自定義Header攔截器。
## OkHttp 5個攔截器
1.失敗重試、重定向攔截器。
2.橋攔截器:主要是添加和刪除一些header
3.緩存攔截器:根據緩存策略,如果緩存可用,直接返回緩存數據。
4.連接池攔截器:連接池會緩存http鏈接,連接池的好處是復用連接,少了3次握手,所以請求會更快
5.真正訪問網絡的攔截器:內部使用okio去發請求
- Android
- 四大組件
- Activity
- Fragment
- Service
- 序列化
- Handler
- Hander介紹
- MessageQueue詳細
- 啟動流程
- 系統啟動流程
- 應用啟動流程
- Activity啟動流程
- View
- view繪制
- view事件傳遞
- choreographer
- LayoutInflater
- UI渲染概念
- Binder
- Binder原理
- Binder最大數據
- Binder小結
- Android組件
- ListView原理
- RecyclerView原理
- SharePreferences
- AsyncTask
- Sqlite
- SQLCipher加密
- 遷移與修復
- Sqlite內核
- Sqlite優化v2
- sqlite索引
- sqlite之wal
- sqlite之鎖機制
- 網絡
- 基礎
- TCP
- HTTP
- HTTP1.1
- HTTP2.0
- HTTPS
- HTTP3.0
- HTTP進化圖
- HTTP小結
- 實踐
- 網絡優化
- Json
- ProtoBuffer
- 斷點續傳
- 性能
- 卡頓
- 卡頓監控
- ANR
- ANR監控
- 內存
- 內存問題與優化
- 圖片內存優化
- 線下內存監控
- 線上內存監控
- 啟動優化
- 死鎖監控
- 崩潰監控
- 包體積優化
- UI渲染優化
- UI常規優化
- I/O監控
- 電量監控
- 第三方框架
- 網絡框架
- Volley
- Okhttp
- 網絡框架n問
- OkHttp原理N問
- 設計模式
- EventBus
- Rxjava
- 圖片
- ImageWoker
- Gilde的優化
- APT
- 依賴注入
- APT
- ARouter
- ButterKnife
- MMKV
- Jetpack
- 協程
- MVI
- Startup
- DataBinder
- 黑科技
- hook
- 運行期Java-hook技術
- 編譯期hook
- ASM
- Transform增量編譯
- 運行期Native-hook技術
- 熱修復
- 插件化
- AAB
- Shadow
- 虛擬機
- 其他
- UI自動化
- JavaParser
- Android Line
- 編譯
- 疑難雜癥
- Android11滑動異常
- 方案
- 工業化
- 模塊化
- 隱私合規
- 動態化
- 項目管理
- 業務啟動優化
- 業務架構設計
- 性能優化case
- 性能優化-排查思路
- 性能優化-現有方案
- 登錄
- 搜索
- C++
- NDK入門
- 跨平臺
- H5
- Flutter
- Flutter 性能優化
- 數據跨平臺