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实现系统日历同步日程

    这篇文章主要为大家详细介绍了Android实现系统日历同步日程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Android使用okHttp(get方式)登录

    Android使用okHttp(get方式)登录

    这篇文章主要为大家详细介绍了Android使用okHttp(get方式)进行登录,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android App在ViewPager中使用Fragment的实例讲解

    Android App在ViewPager中使用Fragment的实例讲解

    这篇文章主要介绍了Android App在ViewPager中使用Fragment的实例讲解,ViewPager组件主要被用来制作滑动切换效果,需要的朋友可以参考下
    2016-03-03
  • Android Studio注释模板介绍

    Android Studio注释模板介绍

    这篇文章主要介绍了Android Studio注释模板介绍,之前Eclipse敲/**加回车,模板就出来了,而Android Studio却不可以自定义,现在我给大家介绍下用live templates替代,需要的朋友可以参考下
    2015-07-07
  • Android开发必备技巧之高效字符串筛选

    Android开发必备技巧之高效字符串筛选

    在开发过程中或多或少都要使用一些方法去筛选符合我们要求的字符串,所以下面我们就来介绍一些在开发工作中常用到的字符串筛选方法,让大家都能掌握高效的字符串筛选技巧吧
    2023-06-06
  • Android BottomNavigationView底部导航效果

    Android BottomNavigationView底部导航效果

    这篇文章主要为大家详细介绍了Android BottomNavigationView底部导航效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 解决WebView通过URL加载H5界面出现空白的问题

    解决WebView通过URL加载H5界面出现空白的问题

    这篇文章主要介绍了解决WebView通过URL加载H5界面出现空白的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android内容提供者ContentProvider用法实例分析

    Android内容提供者ContentProvider用法实例分析

    这篇文章主要介绍了Android内容提供者ContentProvider用法,结合实例形式较为详细的分析了内容提供者ContentProvider获取及解析数据的相关技巧,需要的朋友可以参考下
    2016-03-03
  • 详解Android PopupWindow怎么合理控制弹出位置(showAtLocation)

    详解Android PopupWindow怎么合理控制弹出位置(showAtLocation)

    本篇文章主要介绍了详解Android PopupWindow怎么合理控制弹出位置(showAtLocation),具有一定的参考价值,有兴趣的可以了解一下
    2017-10-10
  • Kotlin使用滚动控件RecyclerView实例教程

    Kotlin使用滚动控件RecyclerView实例教程

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法
    2022-12-12

最新评论