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,也能夠掃碼進羣。我在這裏期待大家的加入!!!

相關文章
相關標籤/搜索