1. 如何使用Kotlin進行android開發
使用Kotlin進行Android開發的步驟:
1、安裝Android Studio Kotlin插件;
2、配置App的build.gradle文件
apply plugin: 'kotlin-android'
dependencies { compile fileTree(dir: 'libs', include: ['*.jar'] compile 'com.android.support:appcompat-v7:23.1.0' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"}buildscript { ext.kotlin_version = '1.0.0' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" }}
3、創建Kotlin文件作為Activity,或者直接將java類轉換為Kotlin類。
Kotlin是一門與Swift類似的靜態類型JVM語言,由JetBrains設計開發並開源。與Java相比,Kotlin的語法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函數、操作符重載、字元串模板。它與Java高度可互操作,可以同時用在一個項目中。
2. Kotlin for Android使用教程(一)
本文主要講解如何在Android中使用kotlin語言,如果想了解更多關於kotlin的知識, 請查閱官方中文文檔
1. var a = 5 or val a: Int = 5
2. val TAG = "com.myapplication.example"
override fun onCreate(savedInstanceState: Bundle?) {}
view instanceof Button to view is Button
class MainActivity : AppCompatActivity(){}
xxx.println("---size:"+list.size());
print("---size: ${list.size},first: ${list[0]}")
1.if(a >= 3 && a<= b){...}
1.if(a in 3..b){...}
1.在 project -> build.gradle 添加
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.1.0"
2.在 app->build.gradle 添加
apply plugin: 'kotlin-android-extensions'
compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0"
首先是非空判斷
這是普通的if else判斷
現在採用全新而炫酷的表達方式:when
3. 如何使用kotlin編寫android
在Android Studio中打開Settings,選擇Plugins選項,點擊Browse Repositories,在打開的新窗口中搜索Kotlin,如下圖所示。
選擇Kotlin與 Kotlin Extenslons For Android(obsolete)兩個插件分別進行下載安裝。當插件安裝完畢後,重啟Android Studio即可。
在Android Studio中使用Kotlin插件
打開Android Studio新建一個項目,和往常一樣建立一個項目就可以了,項目建立好以後,我們會在右鍵菜單New下看到多出來Kotlin File/Class和Kotlin Activity兩個選項。
- Kotlin File/Class:一個普通的Kotlin類,類似普通的Java類
- Kotlin Actiivty:一個Activity類
4. kotlin開發安卓必備
Kotlin使用了很多函數式編程的概念,比如用到了lambda表達式來更方便地解決問題。
Kotlin Android Extensions:再也不用編寫煩人的findViewById()了,如果你集成了ButterKnife,是時候刪除對它的依賴了,
Kotlin支持了對於View以id形式訪問。
不用寫分號,就像你看到的上述代碼一樣,對於很多寫過腳本語言的童鞋來說,不要寫分號這一點真是節省了很多時間,對於一
天寫幾百行幾千行甚至上萬行代碼的童鞋們來說,相當於省了多少個分號.
到這里有的同學想要說了,你說的這些好處確實不錯,但是我之前的項目全是用java語言來寫的,難不成讓我推倒重來過?別急,最後我要說的一個最大的優勢就是
與Java語言可混合編程,也就是說我們可以繼續使用原來所有用Java寫的代碼和庫,因為兩個語言之間高度互操作,想嘗試的童
鞋們建議可以從新的小功能小模塊入手,對這些模塊使用Kotlin代碼進行編寫,原有的穩定模塊之後再逐步重構。
對初學者友好,kotlin對java語言轉用kotlin提供了很多便利,對於初學者來說免去很多不必要的煩惱。最貼心的是Kotlin插件
支持一鍵由Java轉Kotlin,為你之後想要重構提供了很大的便利性。
5. 應該使用Kotlin進行Android開發嗎
Kotlin的優勢
因此,您可能需要考慮切換到設計為在JVM上運行的許多現代編程語言之一。盡管編譯為Java位元組碼的語言不乏,但有一些因素使Kotlin脫穎而出:
與Java的互換性
Kotlin作為Java的潛在替代品的最大優勢之一是Java和Kotlin之間的互操作性水平 - 您甚至可以在同一個項目中並行存在Java和Kotlin代碼,並且所有內容仍將完美編譯。下面,您可以看到由Java Activity和Kotlin Activity組成的項目示例。
事實上,一旦你的混合的Kotlin和Java項目被編譯,用戶將無法知道您的項目的哪些部分是用Java編寫的,哪些部分是用Kotlin編寫的。
由於Kotlin和Java類可以並行存在於同一個項目中,所以您可以開始使用Kotlin,而無需像Kotlin一樣將整個項目轉換為Kotlin,或者專門開始一個新項目,以便您可以在Kotlin嘗試您的手。
由於這種互操作性水平,如果您有一個您已經開始工作的項目,您可以在該項目的一小部分中試用Kotlin,而不會影響其餘的代碼庫。而且,如果您確定要繼續使用Kotlin,則可以將項目現有的Java代碼一次遷移到Kotlin一個文件,也可以將項目的舊Java代碼保持原樣,並且只能使用Kotlin來實現新的類和功能。
由於Kotlin可以與Java完全互操作,您還可以使用Kotlin項目中的大多數Java庫和框架,甚至依賴於注釋處理的高級框架。
簡單學習曲線
Kotlin旨在加強Java,而不是完全重寫,所以您在Java職業生涯中獲得和磨練的許多技能仍然適用於您的Kotlin項目。
Kotlin也被設計為Java開發人員有一個溫和的學習曲線。 Java開發人員應該發現,Kotlin的大部分語法都很熟悉;例如,用於在Kotlin中創建一個新類的代碼與Java非常相似:
1
class
MainActivity : AppCompatActivity() {
Kotlin也被設計為直觀易讀,所以即使你遇到一些截然不同的代碼,你仍然可以得到這個代碼的作用。
結合最好的功能和程序編程
目前有一些廣泛使用的編程範例,但是當涉及到「哪種方法是最好的」的時候,沒有簡單的答案。每個編程範例都有自己的優點和缺點,因此盡管功能編程有優勢的場景不乏,但程序方法更有效的問題也很多。
那麼為什麼要在功能和程序之間選擇呢?像許多現代編程語言一樣,Kotlin旨在通過結合程序和功能編程的概念和元素,為您帶來最好的兩個世界。
一流的Android Studio支持
Kotlin是由JetBrains開發的,該公司是Android Studio所基於的IntelliJ-IDE的公司。那麼,Android Studio對Kotlin有很好的支持並不奇怪。一旦您安裝了Kotlin插件,Android Studio就可以在您的項目中配置Kotlin,就像打開幾個菜單一樣簡單。
一旦您為Android Studio設置了Kotlin插件,您的IDE將無需理解,編譯和運行Kotlin代碼。 Android Studio還為Kotlin提供調試,自動完成,代碼導航,單元測試和完全重構支持。
一旦您的Android Studio項目配置為支持Kotlin,您甚至可以將整個Java源文件轉換為Kotlin文件,只需點擊幾下滑鼠。
更簡潔的代碼
如果比較產生相同結果的Java類和Kotlin類,則寫入Kotlin的類通常比使用Java編寫的一樣簡潔和緊湊。 而且每個開發者都知道,代碼減少意味著更少的錯誤!
有什麼收獲?
沒有編程語言是完美的,所以雖然Kotlin有很多提供Android開發人員,但您需要注意一些缺點:
額外的運行時大小
Kotlin標准庫和運行時將增加您的.apk的大小。雖然這只相當於大約800KB,如果您的應用程序已經在很大的一邊,那麼額外的800KB可能會提示它在邊緣,並讓用戶在下載你的應用程序之前思考兩次。
代碼的初始可讀性
雖然Kotlin的簡潔語法是語言最大的優點之一,但是最初可能會發現一些Kotlin很難解讀,因為在這么少的代碼中有很多事情要做。 Java可能更冗長,但是上面的一切都是明確的,這意味著不熟悉的Java代碼比不熟悉的Kotlin更容易破譯。
另外,如果使用不當,Kotlin的操作員重載會導致難以閱讀的代碼。
缺乏官方支持
Kotlin可能在Android Studio中有很好的支持,但值得一提的是,Kotlin沒有得到Google的正式認可。
此外,與純Java項目相比,當您使用Kotlin時,Android Studio的自動完成和編譯往往運行速度稍慢。
更小的社區和更少的可用幫助
由於Kotlin是一種相對較新的語言,所以Kotlin社區仍然相對較小,特別是與圍繞更為成熟的Java語言的社區相比。如果您切換到Kotlin,那麼您可能無法訪問相同數量的教程,博客文章和用戶文檔,並且可能會在論壇和堆棧溢出等場合遇到較少的社區支持。在撰寫本文時,在Stack Overflow上搜索Kotlin只返回標簽為Kotlin的4,600個帖子,而包含Java標簽的高達1,000,000個帖子。
6. Android 開發進階:Kotlin Coroutines 使用詳解
還記得第一次聽到 Coroutines 的時候,納悶了一下,口瑞停,這是什麼新的番號招式(誤),之後其實也沒有多在意了,好一段時間,因為一個檔案的 I/O 會把 UI Thread 卡住,必須要用非同步程序去處理,寫 Handler Thread 可以避免,這也是最基礎的方式,缺點也很明顯某些時候還是避不掉,寫 RX 又總覺得微妙感覺有點殺雞用牛刀的感覺,後來看了一下決定用 Coroutines ,於是有了本篇文章。
普通情況下,執行的順序會是很直白的 functionA() -> functionB() -> functionC() 。
如果只有一個 thread ,這樣很順暢沒問題。
但假如這是一個跑在 main thread 上,而 ·function A· 是需要另一個 thread 的處理結果,而該結果是需要該 thread 耗費長時間作業才可以獲得的。這邊姑且稱為 IO thread 好了。那不就意味著 function A 得等到 IO thread 處理結束並告知結果才能繼續執行 function A 乃至 function B 之後才是 function C 呢?
那在等待 function A 的時候 main thread 啥事都不能做,只能 idle 在那邊動也不動。
這如果是在 Android main thread 上,這樣的行為會讓畫面 freeze ,時間稍微長一點就會 ANR 被 OS 當作壞掉進行異常排除了。
其實這個非同步問題解決方案很多,諸如自己寫一個 callback ,或者自干 Handler thread 去控管或者是用 RX ,去訂閱之類。某些時候顯得不直觀,或者使用起來麻煩,總有種殺雞何需使用牛刀的感覺。
那有沒有可能?我就寫成上面那樣,但是當 function A 在等待 IO thread 時,讓 main thread 去做其他的事情,等到 IO thread 結束耗時處理後,再回來繼續執行 function A , function B 、 function C 呢?
是的,可以,這個解決方案便是 Coroutine 。
Coroutines ,這個單字會被標成錯字,理由是他其實是兩個單字合並而成的,分別是 cooperation + routine, cooperation 意指合作,routine 意指例行作業、慣例,照這里直接翻譯就會是合作式例行作業。
想到輝夜姬讓人想告白提到了慣例行為,也是念作 routine
那我們看到的翻譯多半會是協程、協作程序…這樣講沒啥前後感,誰協助程序?協助啥程序? 總之就是滿頭的問號。
這里 routine 指得是程序中被呼叫的 function、method ,也就是說,我們將 function 、method 協同其他更多的 function、method 共同作業這件事情稱為 Coroutines 。
協同作業聽起來還是很抽象,具體協同什麼呢?
這便是 Coroutines 最典型的特色,允許 method 被暫停( suspended)執行之後再回復(resumed)執行,而暫停執行的 method 狀態允許被保留,復原後再以暫停時的狀態繼續執行。
換句話說,就是我在 main thread 執行到 function A 需要等 IO thread 耗時處理的結果,那我先暫停 function A , 協調讓出 main thread 讓 main thread 去執行其他的事情,等到 IO thread 的耗時處理結束後得到結果後再回復 function A 繼續執行,已得到我要的結果,這便是 Coroutines 的概念,這聽起來不是很簡單了呢?
事實上這個概念早在 1964 年就已經被提出了,而很多語言也都有這樣的概念,只是 Android 上頭類似的東西一直沒有被積極推廣,直到 Kotlin 成為官方語言後, Coroutines 以 Support Library 的形式被推廣才又在 Android 業界流行起來。
首先,因為 Kotlin 的 Coroutine 並沒有包含在原有包裝中,而是以 Support Library 的形式提供開發者使用,所以需要另外導入該 Library。
這里選用這個版本進行演示,實際中可以根據自己的需要修改版本。
那因為是在 Android 上使用的, Android 上頭的 main thread 跟普通 java 有點不一樣,所以還需要另一個 implementation,不然會報錯。
導入之後就可以開始使用了。
這邊我想做的是畫面上有一個會倒數的 Text ,用 Coroutines 可以簡單地做到
那跑起來結果就像這樣:
這樣如果要 Thread 有相同的結果可以寫成這樣:
這樣會有什麼問題就是另一個故事了,至少現在這樣不會馬上出現 Exception (最常見的就是使用者離開畫面沒多久就出現一個 Exception),不過也並不是說用 Coroutines 就不會發生這些問題,記得這些做法沒有什麼優劣,差別在都選擇就是了。
說回 Coroutines ,那跟 Thread 一樣,某些時候我們會想要臨時把它停住,那 GlobalScope.launch 會回傳一個 Job class 的玩意
想要把它停住的話就用 cancel 即可
Scope 指得是范圍, Coroutines 可以作用的范圍。在 Main thread 上或是 IO thread 上,又或者希望開更多的 Worker thread,然後是可以在某個控制流(e.g Activity 的生命周期)中可被控制的。
原則上,在 Kotlin 里頭使用任何標記 suspend 的 method(後面會提)都會在 Scope 裡面,這樣才可以控制 Coroutines 的行進與存活與否。
那這邊舉的例子, GlobalScope 繼承自 CoroutineScope 。它是 CoroutineScope 的一個實作,它的概念就是最高層級的 Coroutines ,它的作用的范圍伴隨著 Application 的生命周期,那其實他的概念與 Dispatch.Unconfined 相同(待會會提到),用他其實可以避免 Coroutines 被過早結束,但也要記得是,這個用法類似直接呼叫靜態函數,需要注意。
那如果直接實作 CoroutineScope 呢?
那會要求實作一個 CoroutineContext ,這是什麼玩意?指的就是 Coroutines 作用的情景,這邊可以指定他是在 Main thread 上或者就直接弄一個 Job 給他:
這樣 launch 的時候就會使用這個 Job 來操作了,如果沒有特別定義,那這個 Job 就是跑在 Worker thread 上了,用它更新 UI 會出現 Exception ,這方面可以依據自己的需求去做調整。
不過更多時候我會希望他能夠跑在 Main Thread 上, Koltinx Coroutine 有提供 CoroutineScope 的實作 - MainScrope
7. 如何使用kotlin編寫android
在Android
Studio中打開Settings,選擇Plugins選項,點擊Browse
Repositories,在打開的新窗口中搜索Kotlin,如下圖所示。
選擇Kotlin與
Kotlin
Extenslons
For
Android(obsolete)兩個插件分別進行下載安裝。當插件安裝完畢後,重啟Android
Studio即可。
在Android
Studio中使用Kotlin插件
打開Android
Studio新建一個項目,和往常一樣建立一個項目就可以了,項目建立好以後,我們會在右鍵菜單New下看到多出來Kotlin
File/Class和Kotlin
Activity兩個選項。
-
Kotlin
File/Class:一個普通的Kotlin類,類似普通的Java類
-
Kotlin
Actiivty:一個Activity類
8. 用 Kotlin 寫 Android 3—數組,集合與字元串
相比 Java,在 Kotlin 里數組的寫法變化還是挺大的,用 xx-Array 的命名規則來聲明一個數組類型,並用 xx-ArrayOf 來進行初始化。
例如整型數組,IntArray 類型,IntArrayOf 是初始化方法,以此類推其他基礎類型也差不多。
要注意的是,String 類型的數組聲明有所不同,Array<String> 表示一個字元串數組,arrayOf 是初始化方法。由此也可以得出,像我們自己定義的一些模型類要是想聲明一個數組應該是和 String 一個用法。
雖說數組的聲明寫法上有差別,但在數組元素的基本使用上可以說相差不大。
Kotlin 里的容器類分三大類,並且每個類又分為不可修改和可修改兩種,這就好比 val 和 var 的變數聲明一樣。默認情況是不可修改的,要想對容器類進行類似增,刪,改的操作就要聲明可修改,即要加上前綴 Mutable-。和數組初始化方法類似,容器類的初始化方法也是 xx-Of 系列,xx 表示具體容器類型,例如如果是可變集合初始化那就是 MutableSetOf。
遍歷
三者都能進行 for-in 循環,
三者都能進行迭代器循環遍歷,
除此之外三者還能進行 forEach 循環遍歷,不過對 Map 來說有 API 24 的版本限制,其次雖說寫法簡單,但可能實用性不那麼強,畢竟實際開發中不會說僅做個簡單遍歷吧。所以我覺得記住上面兩種較通用的寫法就夠了。
字元串的常規方法沒有太大的改變,我們依然可以用 indexOf, subString, replace, split 等方法。對於類型轉換,Kotlin 中的字元串提供了 to-xxx 系列的方法,例如字元串轉整型 toInt,字元串轉浮點型 toFloat 等。
另外一個就是 Kotlin 里用 ${} 替換了 Java 中的 String.format 來用於字元串模板效果。
9. Android開發-kotlin基本使用(一)
在app->manifests->AndroidManifest.xml添加網路訪問許可權:
在 app/build.gradle 的 dependencies 中添加下面的依賴
在http->HiOkHttp中
在MainActivity.kt中使用:
在 app/build.gradle 中添加以下依賴配置
在Account.kt中使用:
如果對象模型使用data class, 就可以不用指定初始值了:
使用插件快速生成復雜的數據模型 -- JsonToKotlin插件:
retrofit註解驅動型上層網路請求框架, 使用註解來簡化請求, 大體分為以下幾類:
在app/build.gradle中添加以下配置。使用Glide載入圖片
10. 如何優雅地使用 kotlin 開發 android 應用
從網上大概看了一下,主要是代碼量可以減少很多,重要的是更便捷,更加函數化:Anko是Kotlin項目的一部分,旨在更快更輕松的開發安卓應用。是一個用Kotlin編寫的庫,也是專門用來進行安卓開發的DSL(領域特定語言)。使用該庫的一個顯著的優勢就是大幅的簡化了界面的編寫。verticalLayout{valname=editText()button("SayHello"){onClick{toast("Hello,${name.text}!")}}}以上的代碼對應的界面如下helloworldAnko還支持很多其他的特性,比如界面動畫,與資料庫的交互,實現同步操作,Service,Intent等等。都實現了用更少的代碼實現同樣的邏輯。