当前位置: 首页>移动开发>正文

Android Kontlin单例 安卓开发 kotlin

Kotlin的背景

一种 基于 JVM 的 静态类型编程语言 。

JetBrains(位于东欧捷克)是 著名的JAVA开发IDE IntelliJ IDEA(Android Studio基于此开发) 软件的开发公司。 Kotlin 来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island)。

静态编程语言, 与 Java™ 和 Android™ 100% 可互操作

是 Android 官方开发语言了!

构建用于以下平台的应用: JVM, Android ,浏览器、原生 (就快好了) 。

为什么选择 Kotlin

简洁

大大减少样板代码的数量。

使用一行代码创建一个包含 getters、 setters、 equals()、 hashCode()、 toString() 以及 copy() 的 POJO:

data class Customer(val name: String, val email: String, val company: String)

或者使用 lambda 表达式来过滤列表:

val positiveNumbers = list.filter { it > 0 }

想要单例?创建一个 object 就可以了:

object ThisIsASingleton {
    val companyName: String = "JetBrains"
}

object ThisIsASingleton {
}

安全

避免空指针异常、自动类型转换。

彻底告别那些烦人的 NullPointerException

var output: String
output = null   // 编译错误

var output: String
output = null   // 编译错误

Kotlin 可以保护你避免对可空类型的误操作

val name: String? = null    // 可空类型
println(name.length())      // 编译错误

val name: String? = null    // 可空类型
println(name.length())      // 编译错误

注意,String? 表示可以为 null 的 String 类型(可空类型)。

并且如果你检查类型是正确的,编译器会为你做自动类型转换

fun calculateTotal(obj: Any) {
    if (obj is Invoice)
        obj.calculateTotal()
}

fun calculateTotal(obj: Any) {
}

互操作性

充分利用 JVM、Android 和浏览器的现有库。

使用 JVM 上的任何现有库,因为有 100% 的兼容性,包括 SAM 支持。

import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers
Flowable
    .fromCallable {
        Thread.sleep(1000) //  模仿高开销的计算
        "Done"
    }
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.single())
    .subscribe(::println, Throwable::printStackTrace)

无论是 JVM 还是 JavaScript 目标平台,都可用 Kotlin 写代码然后部署到你想要的地方

import kotlin.browser.window
fun onLoad() {
    window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
}

工具友好

可用任何 Java IDE 或者使用命令行构建。

一门语言需要工具化,而在 JetBrains,这正是我们做得最好的地方!

Kotlin Android开发

Intellij IDEA 是 JetBrains 提供的集成开发环境,可以用来开发 Kotlin 应用程序。

如果你是一名 Android 开发者,你也可以使用 Android Studio 来开发 Kotlin 程序。如你所知,Android Studio 其实就是 Intellij IDEA 的插件扩展,Intellij IDEA 是由 JetBrains 所开发,而 Kotlin 同样是由 JetBrains 创造的,其中的兼容性自然不用多说。

安装 Kotlin 插件

Android Studio 从 3.0 版本开始内置安装 Kotlin 插件。如果你正在使用的是早期版本, 需要通过 File | Settings | Plugins | Install JetBrains plugin… 搜索并安装 Kotlin 插件。 在 Android Studio 欢迎界面中,可以通过 Configure | Plugins | Install JetBrains plugin… 。 安装完成后需要重新启动 Android Studio。

Settings --> Plugin --> 点击Browse repositories --> 
搜索"Kotlin"(2017-5-3更新,696K下载,V1.1.2版本,57.2M)--> Install

由于插件过大,在AS可能很难下载成功,可以去 https://plugins.jetbrains.com/   搜索后下载, 也可以在AS中搜索到后,根据插件提示去指定位置下载。 Kotlin V1.1.2下载(适用于AS 2.3-3)  

创建新工程

在本章教程中,我们直接根据 Android Studio 的引导进行操作。若你当前使用的 IDE 是 Intellij IDEA,所有操作几乎一致。

为新工程命名,选择已安装的 Android SDK 版本。实际上大多数选项均有默认值 ,只需要按几次“回车”键即可。

启用 Kotlin 支持的选项,勾选后可以 跳过 “配置 Kotlin 工程(Configuring Kotlin in the project)”的步骤。

Converting Java code to Kotlin)”这一步骤。早期版本中则会先使用 Java 创建 activity,然后再使用自动转换工具 进行转换。

将 Java 代码转换为 Kotlin

直接使用 Java 编写代码,再复制粘贴到 Kotlin 文件中,IntelliJ IDEA(或Android Studio)会提示需要转换代码。

Convert Java File to Kotlin File

注意:
此命令是把【.Java文件】转换为【.kt文件】,并把【Java格式的代码】转换为【Kotlin格式的代码】,而对于【.kt文件中的Java格式的代码】,通过此命令不会转换为Kotlin格式的代码

kotlin-android 插件

操作即可;或者可以在菜单栏中选择 Tools | Kotlin |  Configure Kotlin …

选择配置时选择 all modules containing kotlin files 以及已安装的最新版本即可。

build.gradle 文件会更新。 你能看到新增了 apply plugin: 'kotlin-android'

app目录下的build.gradle

apply plugin: 'kotlin-android'
...
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

根目录下的build.gradle

buildscript {
    ext.kotlin_version = '1.1.2-3'
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

构建和发布Kotlin应用程序

构建应用程序,在虚拟机或连接的设备上运行。 所有这些工作与 Java 并无区别。你可以发布应用程序,并以类似于使用 Java 编写的 Android 应用程序的方式进行 签名。

整个库的大小约 859KB(1.1.2-2 版本)。这意味着 Kotlin 对 apk 文件大小影响微乎其微。

就对比 Kotlin 与 Jav a所编写的程序而言,Kotlin 编译器所生成的字节码看上去几乎毫无差异。

**Kotlin Android 扩展插件

扩展插件提升安卓的开发体验。

背景

需要为每一个 View 注解变量字段。 现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,且 不需要添加任何额外代码,也不影响任何运行时体验 。

我们可以写出如下代码:

import kotlinx.android.synthetic.main.activity_main.*
class MyActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        textView.setText("Hello, world!")// 而不是 findView(R.id.textView) as TextView
    }
}

textView 是对 Activity 的一项扩展属性,与在 activity_main.xml 中的声明具有同样类型。

kotlin-android-extensions 插件

Kotlin 安卓扩展插件是 Kotlin IDEA 插件的组成之一,因此不需要再单独额外安装 ,开发者仅需要在项目的 build.gradle 文件中 启用 即可:

apply plugin: 'kotlin-android-extensions'

代码导入指定布局文件中所有控件属性:

import kotlinx.android.synthetic.main.<布局文件名称>.*

若需要调用 View 的合成属性(在适配器类中非常有用),同时还应该导入

import kotlinx.android.synthetic.main.<布局文件名称>.view.*

导入完成后即可调用在xml文件中以视图控件命名属性的对应扩展

多渠道

安卓多渠道。假设当前在 build.gradle 文件中指定一个名为 free 的渠道:

android {
    productFlavors {
        free {
            versionName "1.0-free"
        }
    }
}

所以现在只需要添加一行导入语句即可从 free/res/layout/activity_free.xml 布局中导入所有的合成属性:

import kotlinx.android.synthetic.free.activity_free.*

背后原理

Kotlin 安卓扩展作为 Kotlin 编译器的插件,主要有两大作用:

一个隐藏缓存函数以及一个变量。该方法非常简洁,因此不会直接对APK体积有明显增加。

使用函数调用替换每一个合成属性。

其工作原理是,当调用合成属性,在模块资源中 Kotlin Activity/Fragment 类作为接收器时,缓存函数将被调用。 例如:

class MyActivity: Activity()
fun MyActivity.a() { 
        this.textView.setText(“”) 
}

在 MyActivity 中生成一个隐藏缓存函数,因此我们可以使用缓存机制。

然而在下面的例子中:

fun Activity.b() { 
        this.textView.setText(“”)     
}

我们并不知道这个函数会被我们自己的来源或者普通的 Java Activity 调用,因此, 即便在前一个示例中的 MyActivity 是接收器,也不会使用缓存。


https://www.xamrdz.com/mobile/4sm1960685.html

相关文章: