作用域
Net的网络请求本身支持在官方的自带的作用域内使用, 但是考虑到完整的生命周期和错误处理等推荐使用Net内部定义的作用域.
全部使用顶层扩展函数
异步任务的作用域¶
快速创建可以捕捉异常的协程作用域, 以下作用域不会触发全局错误处理
函数 | 描述 |
---|---|
scope |
创建最基础的作用域, 所有作用域都包含异常捕捉 |
scopeLife |
创建跟随生命周期取消的作用域 |
ViewModel.scopeLife |
创建跟随ViewModel 生命周期的作用域 |
网络请求的作用域¶
网络请求的作用域可以根据生命周期自动取消网络请求, 发生错误也会自动弹出吐司(可以自定义或者取消), 并且具备一些场景的特殊功能(例如加载对话框, 缺省页, 下拉刷新等)
以下作用域会触发全局错误处理
函数 | 描述 |
---|---|
scopeNet |
创建自动处理网络错误的作用域 |
scopeNetLife |
创建自动处理网络错误的作用域, 且包含跟随Activity或者Fragment生命周期 |
scopeDialog |
创建自动加载对话框的作用域, 生命周期跟随对话框 |
ViewModel.scopeNetLife |
创建跟随ViewModel 生命周期的作用域 |
PageRefreshLayout.scope |
创建跟随PageRefreshLayout生命周期的作用域 |
StateLayout.scope |
创建跟随StateLayout生命周期的作用域 |
PageRefreshLayout/StateLayout 属于BRV框架中的布局, 用于支持自动化缺省页/下拉刷新
捕捉异常/执行完成¶
scope {
// scope系列函数的这个大括号里面就是作用域
}.catch {
// 协程内部发生错误回调, it为异常
handleError(it) // 该函数会将错误再次传递给全局错误回调处理
}.finally {
// 协程内全部执行完成回调(包括子协程), it为异常(如果正常完成则为null)
}
以下函数幕后字段it
为异常对象
函数 | 描述 |
---|---|
catch | 作用域被catch 则不会被传递到全局异常处理回调中: 全局处理异常, 除非使用handleError 再次传递给全局 |
finally | 同样可以获取到异常对象, 且不影响全局异常回调处理 |
如果想了解详细的协程使用方式, 可以查看我的一篇文章: 最全面的Kotlin协程: Coroutine/Channel/Flow 以及实际应用