原创 Android 異步UI

之前有分析過子線程中直接更新ui 衆所周知CalledFromWrongThreadException是檢查original thread,也就是創建ui的線程。那麼在子線程中創建ui,自然也可以在此線程中更新ui。 要維護一個子線程,首先

原创 擼一個kotlin DSL UI框架

用kotlin的語法特性擼個聲明式的ui框架,期望的效果是flutter式的ui寫法。並無實際意義,僅作學習之用,實際上我們期待jetpack compose就好。閒話不多說,開始實現。 首先我們的Activity需要一個setConten

原创 擼一個kotlin DSL UI框架之二

接上之前的demo擼一個kotlin DSL UI框架 基礎界面已經有了,數據源變化該如何更新UI呢?既然寫的像聲明式了,當然是期望數據源變化時,UI自動刷新。 我選擇屬性代理,下面開擼。 首先需要ObservableProperty實現類

原创 擼一個kotlin DSL 日期庫

很多小夥伴還是在用JAVA的寫法寫kotlin,當然也沒啥毛病;but這樣一來kotlin的很多語法特性都沒能得到充分發揮,用kotlin去重寫一遍JAVA的邏輯也沒有絲毫意義。 下面提供一個思路,期望達到的效果:用自然語言的方式進行api

原创 擼一個kotlin DSL ui框架

用kotlin的語法特性擼個聲明式的ui框架,期望的效果是flutter式的ui寫法。並無實際意義,僅作學習之用,實際上我們期待jetpack compose就好。閒話不多說,開始實現。 首先我們的Activity需要一個setConten

原创 App bundle打包簽名、安裝調試

常用命令 打包aab ./gradlew :app:bundleRelease 簽名aab jarsigner -keystore keystore.path -digestalg SHA1 -sigalg SHA1withRSA aab

原创 gradle 調試transform代碼

Edit Configurations 左上角➕ 選擇remote 複製箭頭處內容,並選擇調試的module爲plugin所在module。 Gradle選中build右鍵 create buil

原创 gradle transform

關於transform的定義這裏不再細說。 下面寫個demo,將項目中所有參與編譯的類輸出到文件,寫入本地。 在plugin中創建class繼承Transform public class ZjyxTransform extends Tra

原创 gradle plugin

自定義gradle插件,三種創建方式: build.gradle buildSrc plugin module build.gradle app.build.gradle中直接編寫 apply plugin: AppPlugin cla

原创 adb App bundle打包簽名

打包aab ./gradlew :app:bundleRelease 簽名aab jarsigner -keystore keystore.path -digestalg SHA1 -sigalg SHA1withRSA aab.path

原创 AsyncTask引發的RejectedExecutionException

背景 bugly上報java.util.concurrent.RejectedExecutionException。 AsyncTask線程池拋出異常,該線程池由lottie庫調用。 崩潰發生在api29以下機型,api29以上無此異常。很

原创 context.getResources().getIdentifier()

最近寫需求,動態匹配字符串key,用到了context.getResources().getIdentifier()方法。 經測試同學反饋,低版本機型上通過中文key獲取資源id失敗,返回0。 val resourceID = re

原创 retrofit如何支持suspend函數

retrofit2.6.0之後支持接口suspend函數配合協程使用,舉個栗子: ApiService interface LoginApiService : BaseService { @GET("/wxarticle/chapt

原创 Android 2020面經分享

有些公司技術面好幾輪都合併在一起了,會有重複問題。 下面是一些還記得的問題。 公司一 內存泄漏 retrofit源碼 okhttp源碼 線程池 LruCache 大圖片處理 MVP MVVM Activity A 跳轉 B 生命週期 ha

原创 Android LifeCycle原理分析

之前寫過一篇Android LifeCycle presenter實現LifecycleObserver接口觀察生命週期變更,接下來以此爲例,翻下源碼。 Activity中通過 lifecycle.addObserver(presenter