你們好,我是蒼王。
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屬性的值後
源碼優化分析
在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常量,想要被改變只能從新定義
Api26前
Api26後
很顯然Api26後,優化了方法,可使用泛型來提示對象類型
先介紹apply的做用
其源碼
在函數塊內能夠經過this指代該對象,返回值爲該對象本身
with函數
其源碼
將某對象做爲函數的參數,在函數塊內能夠經過this指代該對象。返回值爲函數塊的最後一行或指定return表達式。
let函數
源碼
將對象爲函數的參數,在函數塊內能夠經過it指代該對象。返回值爲函數塊的最後一行或指定return表達式。
run函數
源碼
其有兩種表達形式
第一種無參數輸入。
第二種會將對象自己this給函數調用
返回值爲函數塊最後一行,或者指定return表達式。
kotlin1.1後 添加了aslo函數
其源碼
這張總截圖將會讓你更加明白如何調用。
其共同點爲都能運行函數快,可是四個函數各有差別,你們使用的時候要謹慎選用。
單例對象是使用Object聲明
Kotlin 沒有靜態屬性和方法,須要使用單例對象來實現相似的功能。
Kotlin 沒有靜態屬性和方法,須要使用單例對象來實現相似的功能。
至關於java中定義的數據bean類
其能夠直接在屬性以後編寫get()和set()的方法
實現 Java 調用中的方法重載
圖示重載的是kotlin類的構造方法,其能夠初始化的方法以下。
Task task1 = new Task(「cang_wang");
Task task2 = new Task(「cang_wang","程序員");
Task task2 = new Task(「cang_wang","程序員",「1」);
能夠看到編譯後的java字節碼
使用Decompile按鈕反編譯後,能夠經過Java的代碼邏輯看懂編寫的kotlin
這裏都是寫的是優化點,其餘基本語法就不作過多介紹了。
1.Kotlin的MVP的搭建和Java沒太大的區別
2.Kotlin提供不少優化的語法
3.進一步瞭解kotlin編譯的原理,有更高效的提升。
這裏發一條廣告,我創立了一個小密圈。
天天會分享java基礎,組件化插件化相關,音視頻開源項目分享。
最重要,帶有羣員們珍貴的分析和點評。
還有最新插件化框架的分析和運用,組件化架構技巧的分享,都盡在這裏。
不須要一頓飯的價錢 ,68/一全年的學習資料。
付費是真乾貨,真正節省時間的通往技術的途徑。
來到這裏但願影響你的不僅是技術提高,並且是人生的架構的導向。
成立兩週已經有超過190+的小夥伴加入了咱們的行列了,而且持續增長,讓咱們一塊兒成長,羣內還有不定時福利,包括原創書籍的福利哦。
我創建了一個關於Android架構學習的羣,裏面能夠進一步進行組件化學習的交流。
羣號是316556016,也能夠掃碼進羣。我在這裏期待大家的加入!!!