IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Android实战技巧之四十八:Android上的Java8和kotlin

    lincyang发表于 2016-02-03 15:34:11
    love 0

    Java和Android这对搭档目前也在风雨飘摇中。
    技术圈子的事,往往被商业利益牵着鼻子走。
    世事莫过于此。

    Java8

    目前Android应用开发已经使用到Java7,但对Java8的支持,还遥遥无期。
    对新技术体验者来说,Java8提供了很多不错的特性。
    其中最引人注目的是lambda表达式,以及Stream API,Date Time API,对并发的增强。

    Android应用开发完全支持Java8目前尚没有好的解决方案,但对Java8的民间支持有对应的方案:
    lambda表达式的向后兼容:https://github.com/orfjackal/retrolambda#getting-started
    stream API:http://sourceforge.net/projects/streamsupport/
    new time API:http://www.threeten.org/

    但我个人觉得,只有到了非用不可的地步,才会去在生产中使用它们。
    而对于技术学习,这些都是很好的素材。

    Java8 for Android的结论就是,目前不支持,但民间有相应的支持项目。要想用Java8的新特性在Android应用开发上,实属不易。

    Java作为高级语言,开发效率上一直高于那些Native语言。但它已经20多岁了,在某些场合下已经不太适用了。
    围绕着JVM,世界上出现了很多新的语言。
    比如Groovy,Android Studio使用的Gradle构建工具就是基于Groovy的。
    比如Clojure,是纯粹的函数式编程语言。
    比如Scala,强项是用来做并行运算。
    还有,今天另一个主角,kotlin。

    kotlin

    在其官网有这样一段话:

    Statically typed programming language
    for the JVM, Android and the browser
    100% interoperable with Java

    其要表达三件事:
    1、它是基于JVM的静态类型语言
    2、可以用于Android和web开发
    3、百分百与Java交互

    为什么选择kotlin?
    官网给出四个答案:
    1、简洁
    从语言层面大大简化了使用的繁琐性。比如对lambdas的支持让代码量减少,习惯后会觉得这样更易读。
    2、安全
    语言级避免了令人诟病的空指针异常,等等。
    3、多用途
    构建服务器应用、安卓app、web应用
    4、与Java的交互性
    实践中你会发现这样有多便利

    kotlin还是比较新的语言,目前的版本是1.0beta。它抓住了Java语言发展这么多年无法改变的一些痛点,让这个语言一出生就脱离窘境。
    下面是Linc根据《Kotlin for android Developers》在Android studio上建的第一个kotlin Demo。
    1、安装kotlin插件
    Go to Android Studio的Settings中Plugins,然后安装Kotlin、Anko DSL Preview和Kotlin Android Extensions三个插件。
    如下图。
    2、新建项目,配置gradle
    项目下的build.gradle:

    buildscript {
        ext.support_version = '23.0.0'
        ext.kotlin_version = '1.0.0-beta-4589'
        ext.anko_version = '0.8.1'
    
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.5.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }

    app下的build.gradle:

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.0"
    
        defaultConfig {
            applicationId "com.linc.kotlinhelloworld"
            minSdkVersion 19
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.0.0'
        compile "com.android.support:recyclerview-v7:$support_version"
        compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
        compile "org.jetbrains.anko:anko-sdk15:$anko_version"
        compile "org.jetbrains.anko:anko-support-v4:$anko_version"
    }
    
    buildscript {
        repositories {
            jcenter() }
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
        }
    }

    3、使用kotlin编程
    anko的加入,让我们在layout中使用的控件省去findViewById就可以直接使用。比如:

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            forecast_list.layoutManager = LinearLayoutManager(this);
            forecast_list.adapter = ForecastListAdapter(items)
            toast("hello toast.")
        }

    按键事件可以用lambda表达式,如下:

    btnTest.setOnClickListener({btnTest->toast("button click!")})

    还可以将其简化成:

    btnTest.setOnClickListener{toast("button click!")}

    更多语法糖请参考官方文档:https://kotlinlang.org/docs/reference/

    参考:
    1、android上使用lambda:http://juude.net/lambdajava/



沪ICP备19023445号-2号
友情链接