原创 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