大家好,我是蒼王。
以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。
[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表
相信有關注我的人,都會看過我第一編介紹的Todo-mvp原始碼體驗,這是基礎編。
我們在官網中檢視一下,發現給實際程式碼量的對比,比Java的MVP還少,看來Kotlin的語法糖優化得很不錯。

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

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

根目錄的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,也可以掃碼進群。我在這裡期待你們的加入!!!
