在Android中用Kotlin的Anko运行后台任务(KAD 09)
2017-01-20 16:10
316 查看
作者:Antonio Leiva
时间:Jan 19, 2017
原文链接:https://antonioleiva.com/anko-background-kotlin-android/
Anko是由Jetbrains用Kotlin开发的Android库,它可以用于很多不同的方面。它的主要特性是使用DSL代码创建视图。
虽然这可能是很有趣的,然而事实是我很久以来一直很好地使用XML。所以还没有太多地试用这一特性。
其实它还有其他非常有用的特性,这就是我今天要告知你它是十分酷的原因。
从几个提供框架(如AsyncTask或Loader)到库,有成千上万选择。有些为此使用RxJava。
所有有效的选项都有其自身的优劣。
但它们之中大多数都是非常复杂的,就算是实现简单的在主线程之外做一些繁重任务。
Anko利用Kotlin能力提供简单轻量的解决方案,从长时间运行任务中释放主线程。
如Anko做许多事一样,库的规模失控了。所以需要决定将其拆分。
例如,你仅需要导入:
现在,代码非常类似这样:
但是,我们怎样返回到主线程?
toast() 是Anko提供的另一个有用的函数,它简化了我们在APP中显示消息的方法。
但是重要的是uiThread部分。这是运行在主线程。
你知道了吗?如果一个Activity调用doAsync,那么如果该Activity消亡(isFinishing返回true)uiThread代码是不会执行的。这样,我们就避免了AsyncTask经常出现的错误或其他没有注意activity生命周期的任何回调函数。
但是,如果你真想要冒险用Kotlin创建APP,那么你可以从我的免费指南开始,它将帮助你用Kotlin创建你的第一个Android项目。
时间:Jan 19, 2017
原文链接:https://antonioleiva.com/anko-background-kotlin-android/
Anko是由Jetbrains用Kotlin开发的Android库,它可以用于很多不同的方面。它的主要特性是使用DSL代码创建视图。
虽然这可能是很有趣的,然而事实是我很久以来一直很好地使用XML。所以还没有太多地试用这一特性。
其实它还有其他非常有用的特性,这就是我今天要告知你它是十分酷的原因。
Anko用于执行后台任务
在Android中,主线程经常被其之外的操作运行而阻塞。从几个提供框架(如AsyncTask或Loader)到库,有成千上万选择。有些为此使用RxJava。
所有有效的选项都有其自身的优劣。
但它们之中大多数都是非常复杂的,就算是实现简单的在主线程之外做一些繁重任务。
Anko利用Kotlin能力提供简单轻量的解决方案,从长时间运行任务中释放主线程。
在你的项目添加依赖关系
首先,包含依赖关系。如Anko做许多事一样,库的规模失控了。所以需要决定将其拆分。
例如,你仅需要导入:
1 compile 'org.jetbrains.anko:anko-common:0.9'
在后台线程运行任务
如果你记得,在前一篇文章中我们实现一个非常基本的doAsync函数,它能够在后台运行。Anko能够用执行上下文来完成一件事或其他事。我们稍后会见到一个例子。现在,代码非常类似这样:
1 doAsync { 2 var result = runLongTask() 3 }
但是,我们怎样返回到主线程?
返回主线程
这是非常简单的。你只需在doAsync内部加入uiThread代码块,它将运行主线程。1 doAsync { 2 var result = runLongTask() 3 uiThread { 4 toast(result) 5 } 6 }
toast() 是Anko提供的另一个有用的函数,它简化了我们在APP中显示消息的方法。
但是重要的是uiThread部分。这是运行在主线程。
你知道了吗?如果一个Activity调用doAsync,那么如果该Activity消亡(isFinishing返回true)uiThread代码是不会执行的。这样,我们就避免了AsyncTask经常出现的错误或其他没有注意activity生命周期的任何回调函数。
结论
如你所见,Anko提供了一组共用程序,在我们编写Android APP简化我们的工作。还有其他许多,如对话的创建或数据库的维护,我可以在接下来的文章读到这些。但是,如果你真想要冒险用Kotlin创建APP,那么你可以从我的免费指南开始,它将帮助你用Kotlin创建你的第一个Android项目。
相关文章推荐
- Android native service实例(二)Healthd模块
- Android Studio中的Module打包成jar方法
- Android5.0 标题栏顶部出现空白
- Android-关于一个界面同级中需要两个listView时,一个ListView被嵌套在ScrollView中,ListView的适配器adapter中的getView执行次数重复问题
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- Gradle 的一个打包脚本
- 2016年终总结
- Android音视频学习第4章:视频直播实现之推送视频篇
- Android M(6.0)运行时权限申请及遇到的坑
- Android通过PHP服务器实现登录功能
- Android studio 怎么使用单元测试(不需要device)
- android中常用的设计模式 --- 观察者模式
- Android Studio 常见问题集锦
- Android 全局Dialog的实现方式
- Android string.xml中显示特殊字符
- android新特性:DrawerLayout与NavigationView配合使用
- Android API等级及目录详解
- Android登录时密码保护功能
- Android进阶资源
- Android开发艺术探索(连载)之View 的事件体系(一)view的基本知识