Kotlin Anko库的异步解决方案 doAsync与uiThread的实现理解

Android项目过程中,看到了Anko库的异步框架doAsync()与uiThread()方法,然而Anko库已经被废弃了,目前来说Kotlin协程会是更好的异步解决方案,但我作为初学者还是去了解了一下其实现原理和源码,如有错误理解,欢迎批评指正。

a. doAsync是如何使用的?

doAsync{
	运行耗时的后台任务
	uiThread{
	需要在主线程执行的任务
	}
} 

这里的doAsync{…},我们实际上调用的是 doAsync扩展函数,其源代码如下

fun <T> T.doAsync(
        exceptionHandler: ((Throwable) -> Unit)? = null,
        task: AnkoAsyncContext<T>.() -> Unit
): Future<Unit> {
   
    val context = AnkoAsyncContext(WeakReference(this))
    return BackgroundExecutor.submit {
   
        try {
   
            context.task()
        } catch (thr: Throwable) {
   
            exceptionHandler?.invoke(thr) ?: Unit
        }
    }
} 

doAsync接收两个参数:

  1. 异常情况下的exceptionHandler,默认值为null
  2. 需要在异步环境下运行的函数(代码块),这里的AnkoAsyncContext的实际用途后续会说到。

doAsync的返回类型是Future

Future类在Kotlin官方文档中的解释如下,即,一个用于表达抽象计算的类,其结果可能在未来变得可获取。

Class representing abstract computation, whose result may become available in the future.<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值