Android flutter Dio锁的巧妙实现方法示例
更新时间:2023年01月17日 15:17:02 作者:linversion
这篇文章主要为大家介绍了Android flutter Dio锁的巧妙实现方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
正文
看Dio库源码的时候,发现其拦截器管理的逻辑处用到了一个Lock,这个Lock巧妙地利用了Completer和Future的机制来实现,记录一下。
/// Add lock/unlock API for interceptors.
class Lock {
Future? _lock;
late Completer _completer;
/// 标识拦截器是否被上锁
bool get locked => _lock != null;
/// Lock the interceptor.
///
///一旦请求/响应拦截器被锁,后续传入的请求/响应拦截器将被添加到队列中,它们将不会
///继续,直到拦截器解锁
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锁的巧妙实现方法示例的详细内容,更多关于Android flutter Dio锁的资料请关注脚本之家其它相关文章!
相关文章
详解Android数据存储之Android 6.0运行时权限下文件存储的思考
本篇文章主要介绍了Android数据存储之Android 6.0运行时权限下文件存储的思考,小编觉得挺不错的,现在分享给大家,也给大家做个参考。2016-12-12
Android Socket服务端与客户端用字符串的方式互相传递图片的方法
这篇文章主要介绍了Android Socket服务端与客户端用字符串的方式互相传递图片的方法的相关资料,需要的朋友可以参考下2016-05-05
Android编程实现自定义输入法功能示例【输入密码时防止第三方窃取】
这篇文章主要介绍了Android编程实现自定义输入法功能,可实习输入密码时防止第三方窃取的效果,结合实例形式详细分析了Android布局、控件及输入法相关操作技巧,需要的朋友可以参考下2017-01-01


最新评论