Android?flutter?Dio鎖的巧妙實現(xiàn)方法示例
更新時間:2023年01月17日 15:17:02 作者:linversion
這篇文章主要為大家介紹了Android?flutter?Dio鎖的巧妙實現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
正文
看Dio庫源碼的時候,發(fā)現(xiàn)其攔截器管理的邏輯處用到了一個Lock,這個Lock巧妙地利用了Completer和Future的機制來實現(xiàn),記錄一下。
/// Add lock/unlock API for interceptors. class Lock { Future? _lock; late Completer _completer; /// 標識攔截器是否被上鎖 bool get locked => _lock != null; /// Lock the interceptor. /// ///一旦請求/響應攔截器被鎖,后續(xù)傳入的請求/響應攔截器將被添加到隊列中,它們將不會 ///繼續(xù),直到攔截器解鎖 void lock() { if (!locked) { _completer = Completer(); _lock = _completer.future; } } /// Unlock the interceptor. please refer to [lock()] void unlock() { if (locked) { //調用complete() _completer.complete(); _lock = null; } } /// Clean the interceptor queue. void clear([String msg = 'cancelled']) { if (locked) { //complete[future] with an error _completer.completeError(msg); _lock = null; } } /// If the interceptor is locked, the incoming request/response task /// will enter a queue. /// /// [callback] the function will return a `Future` /// @nodoc Future? enqueue(EnqueueCallback callback) { if (locked) { // we use a future as a queue return _lock!.then((d) => callback()); } return null; } }
以上就是Android flutter Dio鎖的巧妙實現(xiàn)方法示例的詳細內容,更多關于Android flutter Dio鎖的資料請關注腳本之家其它相關文章!
相關文章
Android 日志系統(tǒng)Logger源代碼詳細介紹
本文主要介紹Android 日志系統(tǒng)Logger,這里整理了關于Android源碼的日志系統(tǒng)資料,有研究Android源碼的朋友可以參考下2016-08-08詳解Android應用中使用TabHost組件進行布局的基本方法
這篇文章主要介紹了Android應用中使用TabHost組件進行布局的基本方法,不繼承TabActivity并以最基本的布局文件方式進行布局,需要的朋友可以參考下2016-04-04Android開發(fā)使用URLConnection進行網(wǎng)絡編程詳解
這篇文章主要介紹了Android開發(fā)使用URLConnection進行網(wǎng)絡編程,結合實例形式分析了Android URLConnection對象創(chuàng)建、屬性、方法及相關使用技巧,需要的朋友可以參考下2018-01-01Android ListView物流獲取追蹤功能實現(xiàn)
這篇文章主要介紹了Android ListView物流獲取追蹤功能實現(xiàn)的相關資料,需要的朋友可以參考下2016-03-03Android Studio配置Kotlin開發(fā)環(huán)境詳細步驟
這篇文章主要介紹了Android Studio配置Kotlin開發(fā)環(huán)境詳細步驟的相關資料,需要的朋友可以參考下2017-05-05