原创 Android LiveData原理分析

從API調用入手 舉個栗子:Activity中訂閱數據變更 viewModel.contentLiveData.observe(this, Observer<String> { content -> tv.text

原创 Android ViewModel原理分析

從API調用入手 創建ViewModel實例 //MainActivity ViewModelProvider(this)[MainViewModel::class.java] this--->MainActivity Activity繼

原创 Android 自定義Toolbar

封裝下基本功能:返回鍵,title,功能鍵等。 CustomToolbar class CustomToolbar @JvmOverloads constructor( context: Context, attribute

原创 Android 自定義驗證碼輸入框

本文實現思路:6個TextView,上面覆蓋透明EditText接收輸入事件。 上代碼 VerificationCodeView class VerificationCodeView @JvmOverloads constructor

原创 kotlin 表單驗證工具類

日常開發中經常有這種需求: 表單中EditText全都有輸入內容時,按鈕設爲Enable。 下面擼個工具類 inline fun EditText.afterChangeListener(crossinline block: (s: Edi

原创 Android rxjava源碼淺析

下面談談我的理解 rxjava原理說白了就是三條流: API構建流 事件訂閱流 事件回調流 這裏結合retrofit以接口調用流程爲例做源碼分析 retrofit源碼淺析有說到,retrofit設置RxJava2CallAdapterF

原创 Android okhttp4 kotlin版源碼淺析

本文基於源碼版本---4.7.2 實際上kotlin版相較於java版實現並無不同,調用流程基本一致,僅語法差異。 日常使用okhttp發送異步請求 OkHttpClient().newCall(Request.Builder().

原创 Android 2020 面經

持續更新~~~ 1. 內存泄漏 retrofit原理 okhttp原理 線程池 lrucahce 大圖片處理 MVP MVVM Activity A 跳轉 B 生命週期 handler 然後就是一些具體的業務場景 2. retrofi

原创 kotlin inline、noline、crossinline、reified

使用高階函數時,每個函數都是一個對象,函數調用時還有入棧出棧的開銷。 以lock函數爲例 fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try {

原创 kotlin lambda

kotlin中給View設置監聽可以這麼寫 bt.setOnClickListener { } 反編譯 ((Button)this._$_findCachedViewById(id.bt)).setOnClickListe

原创 JAVA 各種鎖詳細介紹

轉自:https://blog.csdn.net/axiaoboge/article/details/84335452 Java提供了種類豐富的鎖,每種鎖因其特性的不同,在適當的場景下能夠展現出非常高的效率。本文旨在對鎖相關源碼(本文中的源

原创 Android 屏幕適配原理

本文方案爲修改系統density px---------->像素 dpi---------->像素密度 對應於DisplayMetrics類中屬性densityDpi的值 dpi = density*160 density----->屏幕

原创 Android MVVM+Retrofit+協程實踐

附上demo鏈接MVVM+Retrofit+協程組件化項目 本文用到的組件: ViewModel LiveData Retrofit Coroutine 廢話不多說,直接上代碼,寫個簡易框架。 添加依賴 //ViewMo

原创 Android LayoutInflater.setFactory2()

前面寫LayoutInflater時看到了LayoutInflater.Factory和LayoutInflater.Factory2接口 在LayoutInflater.createViewFromTag()方法中 Vie

原创 Android findViewById()執行流程

雖然現在都不手寫findViewById,但還是有必要看一下源碼流程。 val tv = findViewById<TextView>(R.id.tv) AppCompatActivity.findViewById() p