原创 Kotlin學習系列之:協程的創建(一)

1.協程:Coroutine 2.如何去理解協程: 可以視爲輕量級的線程 我們可以回顧一下什麼是線程。從操作系統原理的角度來講,進程是資源分配的基本單位,而線程是調度的基本單位,也就是說線程實際上是系統級別的,它運行與否是由操作系統決定

原创 源碼解析:在Room和Retrofit中使用協程

今天我們就來從源碼的角度上分析Room ORM框架以及Retrofit是如何實現對於Kotlin協程的支持的。 前提知識:對於Kotlin協程有所瞭解,不瞭解的同學可以參考下面系列文章。 Kotlin學習系列之:協程的創建(一) Kot

原创 Kotlin學習系列之:inline、noinline和crossinline

inline:我們在之前已經對其做了專題描述,具體可參閱 Kotlin學習系列之:inline noinline. 當我們的內聯函數中有多個lambda參數時,如果我們想要其中某一個lambda參數不進行內聯,則可以使用noinli

原创 Flutter和Dart系列十二:動畫(Animation)

一個App中如果能有優秀的動畫效果,能讓App看起來顯得更加高大上。此篇我們就來介紹一下Flutter中Animation體系。 我們先來一個簡單的例子,來實現透明度漸變動畫: class FadeInDemo extends Sta

原创 Kotlin學習系列之:使用async和await實現協程高效併發

引例: private suspend fun intValue1(): Int { delay(1000) return 1 } private suspend fun intValue2(): Int {

原创 一步一步掌握在Android中使用Kotlin DSL

譯者前言:在閱讀本篇文章之前,你需要了解Kotlin以下知識點: 擴展函數(Extension Function) 中綴表達式或中綴調用(Infix Function) 運算符重載(Operator Overloading)

原创 Java中數組和ArrayList的區別

Java中數組和List泛型的區別: ArrayList中存放的都是對象,即引用類型,即使我們可以向裏面put一個基本數據類型,那麼也是基於自動裝箱特性,將基本數據類型轉換成對象;而數組中可以是任意類型 從實際工作經歷上看,數組中是可以間

原创 Kotlin學習系列之:協程的創建(三)

經過前面兩篇的學習,我們現在可以來總結一下,我們可以有哪些方式來啓動一個協程: GlobalScope.launch{} runBlocking{} 接下來我們介紹另外的兩種方式,我們先直接來看代碼: fun main() = ru

原创 Kotlin學習系列之:協程的創建(二)

在系列一中,我們已經對協程有了初步的瞭解,我們在此篇繼續。前面我們是通過GlobalScope.launch{}這個協程建造器來創建協程的,它的特點就是: Launches a new coroutine without blocki

原创 使用OkHttp實現WebSocket通信之:斷線重連

之前的兩篇關於如何使用OkHttp來實現WebSocket通信,然後有很多小夥伴私信問我如何實現斷線重連,今天我就把我項目中實現的重連機制代碼貼出來: (我的實現思想就是基於斐波那契數列來進行嘗試重連) 1. 抽象的接口: interf

原创 Kotlin學習系列之:協程的取消和超時

​ 通過前面的三篇文章,我們已經討論了協程的創建。有的時候,我們在啓動了一個協程之後,並不需要該協程執行完畢,這個時候我們可以取消該協程的執行。比如在Android開發中,我們打開了一個頁面,我們在進入頁面的時候啓動

原创 Kotlin學習系列之:協程上下文與分發器

我們在協程的第一篇就已經提過,協程的運行是依賴於線程的。那麼協程與線程之間的關係到底是怎樣的呢? 協程上下文(Coroutine Context):多種元素的集合,包括Job、分發器等。協程總是會在某個上下文中執行的,這個上下

原创 Flutter和Dart系列之十三:按兩次退出應用

在Android應用中,當用戶處於主頁時,爲防止用戶誤觸返回鍵退出應用,一般我們都會設置如果兩秒或者三秒連續點擊兩次才被視爲主動退出應用。那麼在Flutter中,該如何實現該功能呢?這個時候我們就需要藉助於WillPopScope這個類,

原创 窺探JVM(一):類的加載、連接與初始化

我們都知道將java源文件通過javac命令編譯後得到的是.class文件,它是真實存儲在磁盤上的,那麼Java虛擬機是如何將其讀入內存,最終形成虛擬機直接使用的Java類型的呢?這一切都要歸功於虛擬機類加載機制。 虛擬機類加

原创 Android Architecture Component之:深層次理解ViewModel

上一篇我們從源碼層面上分析了LiveData的內部實現,今天我們來走進ViewModel的內心。 回顧如何獲取一個ViewModel實例: ViewModelProvider(this, MainViewModelFactory())