作者:Antonio Leiva 時間:Jan 19, 2017 原文鏈接:https://antonioleiva.com/anko-background-kotlin-android/ Anko是由Jetbrains用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項目。