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等等。都实现了用更少的代码实现同样的逻辑。