MVP+Kotlin源码体验

你们好,我是苍王。
java

如下是我这个系列的相关文章,有兴趣能够参考一下,能够给个喜欢或者关注个人文章。android

[Android]如何作一个崩溃率少于千分之三噶应用app--章节列表git


相信有关注个人人,都会看过我第一编介绍的Todo-mvp源码体验,这是基础编。程序员


MVP Kotlin官网地址
github

咱们在官网中查看一下,发现给实际代码量的对比,比Java的MVP还少,看来Kotlin的语法糖优化得很不错。api



从文件目录中简单的观察,和Todo-mvp的工程没太大区别,去别就是里面全都都换成了Kotlin文件。架构



这里引入kotlin 1.1.3-2版本,没有直接介绍使用Android Studio3.0的配置(这个大坑,谁踩谁知道)app



根目录的build.gradle设定了配置版本为api26框架


Api26就是Android O ,已经试验过,Api26,不少接口都有优化修改,若是不用Api26,将没法跑通。函数

咱们继续看看build.gradle中可使用的改进配置的方式。

useProguard的参数能够配置是否使用混淆


applicationIdSuffix能够用于直接添加后缀到applicationId属性的值后


源码优化分析

1.lateinit

在View声明阶段,都会须要使用lateinit来延迟声明变量。


kotlin中延迟声明还包括lazy的方式

val name: String by lazy {"cangwang"}

lateinit var drwaLayout: drawLayout

区别在于

(1).lazy{} 只能用在val类型, lateinit 只能用在var类型

(2).lateinit不能用在可空的属性上和Java的基本类型上

lateinit var name: String //会报错

(3).lateinit能够在任何位置初始化而且能够初始化屡次,由于其衔接的是var变量。而lazy在第一次被调用时就被初始化,其衔接的是val常量,想要被改变只能从新定义


2.findViewById

Api26前


Api26后


很显然Api26后,优化了方法,可使用泛型来提示对象类型


3.接下来要介绍五个kotlin Standard.kt里面的函数,apply,with,let,run,also

先介绍apply的做用


其源码


在函数块内能够经过this指代该对象,返回值为该对象本身


with函数


其源码


将某对象做为函数的参数,在函数块内能够经过this指代该对象。返回值为函数块的最后一行或指定return表达式。


let函数


源码


将对象为函数的参数,在函数块内能够经过it指代该对象。返回值为函数块的最后一行或指定return表达式。


run函数


源码


其有两种表达形式

第一种无参数输入。

第二种会将对象自己this给函数调用

返回值为函数块最后一行,或者指定return表达式。


kotlin1.1后 添加了aslo函数




其源码




这张总截图将会让你更加明白如何调用。


其共同点为都能运行函数快,可是四个函数各有差别,你们使用的时候要谨慎选用。


4.Object

单例对象是使用Object声明

Kotlin 没有静态属性和方法,须要使用单例对象来实现相似的功能。



Kotlin 没有静态属性和方法,须要使用单例对象来实现相似的功能。


5.data

至关于java中定义的数据bean类


其能够直接在属性以后编写get()和set()的方法



6.@JvmOverloads



实现 Java 调用中的方法重载

图示重载的是kotlin类的构造方法,其能够初始化的方法以下。

Task task1 = new Task(“cang_wang");

Task task2 = new Task(“cang_wang","程序员");

Task task2 = new Task(“cang_wang","程序员",“1”);


7.经过字节码反编译


能够看到编译后的java字节码


使用Decompile按钮反编译后,能够经过Java的代码逻辑看懂编写的kotlin



这里都是写的是优化点,其余基本语法就不作过多介绍了。


总结

1.Kotlin的MVP的搭建和Java没太大的区别

2.Kotlin提供不少优化的语法

3.进一步了解kotlin编译的原理,有更高效的提升。


这里发一条广告,我创立了一个小密圈。

天天会分享java基础,组件化插件化相关,音视频开源项目分享。

最重要,带有群员们珍贵的分析和点评。

还有最新插件化框架的分析和运用,组件化架构技巧的分享,都尽在这里。

不须要一顿饭的价钱 ,68/一全年的学习资料。

付费是真干货,真正节省时间的通往技术的途径。

来到这里但愿影响你的不仅是技术提高,并且是人生的架构的导向。


成立两周已经有超过190+的小伙伴加入了咱们的行列了,而且持续增长,让咱们一块儿成长,群内还有不定时福利,包括原创书籍的福利哦。


我创建了一个关于Android架构学习的群,里面能够进一步进行组件化学习的交流。

群号是316556016,也能够扫码进群。我在这里期待大家的加入!!!

相关文章
相关标签/搜索