MVP+Kotlin原始碼體驗

Cang_Wang發表於2019-03-02

大家好,我是蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表


相信有關注我的人,都會看過我第一編介紹的Todo-mvp原始碼體驗,這是基礎編。


MVP Kotlin官網地址

我們在官網中檢視一下,發現給實際程式碼量的對比,比Java的MVP還少,看來Kotlin的語法糖優化得很不錯。

MVP+Kotlin原始碼體驗


從檔案目錄中簡單的觀察,和Todo-mvp的工程沒太大區別,去別就是裡面全都都換成了Kotlin檔案。

MVP+Kotlin原始碼體驗


這裡引入kotlin 1.1.3-2版本,沒有直接介紹使用Android Studio3.0的配置(這個大坑,誰踩誰知道)

MVP+Kotlin原始碼體驗


根目錄的build.gradle設定了配置版本為api26

MVP+Kotlin原始碼體驗

Api26就是Android O ,已經試驗過,Api26,很多介面都有優化修改,如果不用Api26,將無法跑通。

我們繼續看看build.gradle中可以使用的改進配置的方式。

useProguard的引數可以配置是否使用混淆

MVP+Kotlin原始碼體驗

applicationIdSuffix可以用於直接新增字尾到applicationId屬性的值後

MVP+Kotlin原始碼體驗

原始碼優化分析

1.lateinit

在View宣告階段,都會需要使用lateinit來延遲宣告變數。

MVP+Kotlin原始碼體驗

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前

MVP+Kotlin原始碼體驗

Api26後

MVP+Kotlin原始碼體驗

很顯然Api26後,優化了方法,可以使用泛型來提示物件型別


3.接下來要介紹五個kotlin Standard.kt裡面的函式,apply,with,let,run,also

先介紹apply的作用

MVP+Kotlin原始碼體驗

其原始碼

MVP+Kotlin原始碼體驗

在函式塊內可以通過this指代該物件,返回值為該物件自己


with函式

MVP+Kotlin原始碼體驗

其原始碼

MVP+Kotlin原始碼體驗

將某物件作為函式的引數,在函式塊內可以通過this指代該物件。返回值為函式塊的最後一行或指定return表示式。


let函式

MVP+Kotlin原始碼體驗

原始碼

MVP+Kotlin原始碼體驗

將物件為函式的引數,在函式塊內可以通過it指代該物件。返回值為函式塊的最後一行或指定return表示式。


run函式

MVP+Kotlin原始碼體驗

原始碼

MVP+Kotlin原始碼體驗

其有兩種表達形式

第一種無引數輸入。

第二種會將物件本身this給函式呼叫

返回值為函式塊最後一行,或者指定return表示式。


kotlin1.1後 新增了aslo函式


MVP+Kotlin原始碼體驗


其原始碼

MVP+Kotlin原始碼體驗



這張總截圖將會讓你更加明白如何呼叫。

MVP+Kotlin原始碼體驗

其共同點為都能執行函式快,但是四個函式各有差異,大家使用的時候要謹慎選用。


4.Object

單例物件是使用Object宣告

Kotlin 沒有靜態屬性和方法,需要使用單例物件來實現類似的功能。


MVP+Kotlin原始碼體驗

Kotlin 沒有靜態屬性和方法,需要使用單例物件來實現類似的功能。

MVP+Kotlin原始碼體驗

5.data

相當於java中定義的資料bean類

MVP+Kotlin原始碼體驗

其可以直接在屬性之後編寫get()和set()的方法

MVP+Kotlin原始碼體驗


6.@JvmOverloads

MVP+Kotlin原始碼體驗

實現 Java 呼叫中的方法過載

圖示過載的是kotlin類的構造方法,其可以初始化的方法如下。

Task task1 = new Task(“cang_wang");

Task task2 = new Task(“cang_wang","程式設計師");

Task task2 = new Task(“cang_wang","程式設計師",“1”);


7.通過位元組碼反編譯

MVP+Kotlin原始碼體驗

可以看到編譯後的java位元組碼

MVP+Kotlin原始碼體驗

使用Decompile按鈕反編譯後,可以通過Java的程式碼邏輯看懂編寫的kotlin

MVP+Kotlin原始碼體驗


這裡都是寫的是優化點,其他基本語法就不做過多介紹了。


總結

1.Kotlin的MVP的搭建和Java沒太大的區別

2.Kotlin提供很多優化的語法

3.進一步瞭解kotlin編譯的原理,有更高效的提高。


這裡發一條廣告,我創立了一個小密圈。

每天會分享java基礎,元件化外掛化相關,音視訊開源專案分享。

最重要,帶有群員們珍貴的分析和點評。

還有最新外掛化框架的分析和運用,元件化架構技巧的分享,都盡在這裡。

不需要一頓飯的價錢 ,68/一整年的學習資料。

付費是真乾貨,真正節省時間的通往技術的途徑。

來到這裡希望影響你的不只是技術提升,而且是人生的架構的導向。

MVP+Kotlin原始碼體驗

成立兩週已經有超過190+的小夥伴加入了我們的行列了,並且持續增加,讓我們一起成長,群內還有不定時福利,包括原創書籍的福利哦。

MVP+Kotlin原始碼體驗

我建立了一個關於Android架構學習的群,裡面可以進一步進行元件化學習的交流。

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

MVP+Kotlin原始碼體驗


相關文章