在Android中用Kotlin的Anko运行后台任务(KAD 09)
时间:Jan 19, 2017
原文链接:https://antonioleiva.com/anko-background-kotlin-android/

Anko是由Jetbrains用Kotlin开发的Android库,它可以用于很多不同的方面。它的主要特性是使用DSL代码创建视图。
虽然这可能是很有趣的,然而事实是我很久以来一直很好地使用XML。所以还没有太多地试用这一特性。
其实它还有其他非常有用的特性,这就是我今天要告知你它是十分酷的原因。
Anko用于执行后台任务
在Android中,主线程经常被其之外的操作运行而阻塞。
从几个提供框架(如AsyncTask或Loader)到库,有成千上万选择。有些为此使用RxJava。
所有有效的选项都有其自身的优劣。
但它们之中大多数都是非常复杂的,就算是实现简单的在主线程之外做一些繁重任务。
Anko利用Kotlin能力提供简单轻量的解决方案,从长时间运行任务中释放主线程。
在你的项目添加依赖关系
首先,包含依赖关系。
如Anko做许多事一样,库的规模失控了。所以需要决定将其拆分。
例如,你仅需要导入:
compile 'org.jetbrains.anko:anko-common:0.9'
在后台线程运行任务
如果你记得,在前一篇文章中我们实现一个非常基本的doAsync函数,它能够在后台运行。Anko能够用执行上下文来完成一件事或其他事。我们稍后会见到一个例子。
现在,代码非常类似这样:
doAsync {
var result = runLongTask()
}
但是,我们怎样返回到主线程?
返回主线程
这是非常简单的。你只需在doAsync内部加入uiThread代码块,它将运行主线程。
doAsync {
var result = runLongTask()
uiThread {
toast(result)
}
}
toast() 是Anko提供的另一个有用的函数,它简化了我们在APP中显示消息的方法。
但是重要的是uiThread部分。这是运行在主线程。
你知道了吗?如果一个Activity调用doAsync,那么如果该Activity消亡(isFinishing返回true)uiThread代码是不会执行的。这样,我们就避免了AsyncTask经常出现的错误或其他没有注意activity生命周期的任何回调函数。
结论
如你所见,Anko提供了一组共用程序,在我们编写Android APP简化我们的工作。还有其他许多,如对话的创建或数据库的维护,我可以在接下来的文章读到这些。
但是,如果你真想要冒险用Kotlin创建APP,那么你可以从我的免费指南开始,它将帮助你用Kotlin创建你的第一个Android项目。
在Android中用Kotlin的Anko运行后台任务(KAD 09)的更多相关文章
- 在android中用跑马灯的效果显示textview
大家好,在我们通常的android project中,通常需要用到textview这一个布局文件,并且对于这一个显示布局所需要的文本文字内容. 下面我们就来介绍一种方法来实现在android中用跑马灯 ...
- [Android]使用Kotlin开发Android(二)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHtt ...
- Google Android Studio Kotlin 开发环境配置
Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对Kotlin的重视,本文就介绍一下Android Studio下的Kot ...
- Google Android Studio Kotlin
Google Android Studio Kotlin 开发环境配置 Google 近日开发者大会宣布Kotlin成为Android开发的第一级语言,即Android官方开发语言,可见Google对 ...
- 在Android中用纯Java代码布局
感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...
- Android的Kotlin秘方(I):OnGlobalLayoutListener
春节后,又重新“开张”.各位高手请继续支持.谢谢! 原文标题:Kotlin recipes for Android (I): OnGlobalLayoutListener 原文链接:http://an ...
- android中用get和post方式向服务器提交请求
通过get和post方式向服务器发送请求首先说一下get和post的区别get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23 ...
- 【Android Developers Training】 2. 运行你的应用
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android 创建单独的服务运行在后台(无界面)
转自:https://blog.csdn.net/a704225995/article/details/56481934 今天项目有个需求是,开启一个服务单独运行在后台,而且还不能有界面,在度娘搜索了 ...
随机推荐
- Struts2--Global Result全局结果集
如果有很多action,有共同的result指向, 而且属于不同的包,那么可以继承上面的包, 然后写一个<global-results> 1. jsp显示文件: <ol> &l ...
- 网页被卷去的高: document.body.scrollTop;
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- RMQ问题再临
RMQ问题再临 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 终于,小Hi和小Ho踏上了回国的旅程.在飞机上,望着采购来的特产——小Hi陷入了沉思:还记得在上上周他们去 ...
- js 各种常用js验证
判断http或者https var http = 'https:' == document.location.protocol ? false : true; js的类型检测方式 /**** js的类 ...
- 全球主流8位MCU芯片详细解剖No.2:英飞凌 XC866 - 全文
[导读] XC866是新型8位微控制器系列(XC800)的第一代系列产品,集成高性能8051核.片内FLASH及功能强大的外设集.此外,XC800系列产品内部集成的片 内振荡器和支持3.3V或5.0V ...
- AVR编程_如何通过软件复位AVR?(转)
源:http://blog.sina.com.cn/s/blog_493520900100bpos.html Question 如何通过软件复位AVR? Answer 如果你想通过软件复位AVR,你应 ...
- ibatis一对多 数据库设计及实现
iBatis的多表关联. ibatis的表关联,和数据库语句无关,是在Java程序中,把若干语句的结果关联到一起.这种关联形式,虽然在大数据量时是很奢侈的行为,但是看起来很干净,用起来也很方便. 这里 ...
- Unity3d之流光效果
所谓流光效果,如一个图片上一条刀光从左闪到右边,以下为实现代码: c#代码: using System; using UnityEngine; public class WalkLightEffect ...
- CI分页器pagination的原理及实现
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 下面这段代码是从官网上翻译过来的,介绍了分页的用例 1 2 3 4 5 6 ...
- iOS校验身份证是否合法
//身份证号验证 1900+/2000+的年份日期的正则表达式经过修改,目前貌似是对的,如果哪位朋友发现错误希望能够给与提示 //返回yes位表示格式正确,否则为错误 -(BOOL)IDCardAut ...