原创 5. 【淺入深出理解 dagger、Hilt】 - Hilt進階之MVVM 那麼讓我們直接快速講解 標記符講解表格 作用域

該章站在企業項目角度上如何在MVVM框架上完善並且合理的使用Hilt。 所以如果沒了解MVVM的結構建議可以直接忽略這章。大家知道,MVVM裏面View和Model之間有關聯,假設一個場景View觸發一個點擊事件調用Model查詢,然後Mo

原创 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

該錯誤意思是如下: Android Gradle插件需要Java 11才能運行。 您目前使用的是Java 1.8。 這個原因是因爲項目設置了java1.8,其實改成java 11即可,如圖

原创 Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes

這是因爲一些其他第三方庫使用到了android.support.v4,然後本身代碼是androidx,在一起編譯導致了錯誤。 解決方法: # 需要在gradle.properties中添加下面兩行代碼 # 這是因爲混合支持庫。通過添加這些行

原创 源碼舉例如何優化複雜邏輯UI的類 寫在最後

該文章講解的源碼全憑個人積累的經驗編寫,所以如果有大神覺得不好或者有更好的意見希望可以提出來,謝謝! 本文的適讀人羣 從 zhongjhATC/AlbumCameraRecorder 過來了解如何更深入的自定義Camera佈局 想了解如何

原创 FragmentStateAdapter 引發的一連串問題

這個問題一直搜索相關資料沒發現,後來還是自己瞎琢磨解決的,主要問題還是沒仔細研究源碼弄清原理。 在開始詳細講解之前,先幾句話概括下問題和解決方式 在模擬自動銷燬界面並恢復數據時,FragmentStateAdapter發現一直創建Frag

原创 Kotlin init 調用順序詳解 如果類有主級函數 如果類沒有主級函數 喜歡就點個收藏

在java中,構造函數是可以有多個的。而Kotlin稍微有點不一樣,它會有主級函數,次級函數,當然java也能實現Kotlin的主級次級函數效果。 而我們要說的init就會跟構造函數有密切關係。讓我們直接看結果 調用順序:主級函數>init

原创 實際項目中的java設計模式 -- 狀態模式

AlbumCameraRecorder項目隨着功能的添加,代碼變得笨重了起來,由於核心代碼裏面有多個狀態的互相轉變,不同場景又有不同狀態的處理,導致後期擴展維護很難,便使用了這個狀態模式優化。 直接進入主題優缺點 優點: 將與狀態相關的行

原创 Kotlin enum類與companion之間的問題 ClassNotFoundException, Could not initialize class 如果幫到你,點個贊哦

大家都知道Android推薦用常量代替枚舉enum,這個問題先不討論。 先假設如果一定要用enum 假設java情況下,enum初始化時用到常量或者靜態方法的時候,是很容易的,可以看到下面代碼該枚舉用到靜態方法arraySetof() pu

原创 Unresolved reference: java 1. 庫跟IDE的版本不一致

1. 庫跟IDE的版本不一致 升級IDE版本,或者降低庫的版本即可,下圖是升級IDE Kotlin 如果重新編譯後未生效未解決,,可重新啓動項目即會自動下載,待下載完成後,gradle自動編譯完成即不會再報此類錯誤。

原创 kotlin 委託 類委託 屬性委託 延遲屬性 Lazy 可觀察屬性 Observable 把屬性儲存在映射中 Not Null 局部委託屬性 屬性委託要求 翻譯規則 提供委託

委託模式是軟件設計模式中的一項基本技巧。在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。 Kotlin 直接支持委託模式,更加優雅,簡潔。Kotlin 通過關鍵字 by 實現委託。 類委託 類的委託即

原创 Kotlin 對象表達式和對象聲明 對象表達式和對象聲明之間的語義差異 對象表達式 對象聲明 伴生對象 對象表達式和對象聲明之間的語義差異

Kotlin 用對象表達式和對象聲明來實現創建一個 對某個類做了輕微改動 的類的對象,且不需要去聲明一個新的子類。 對象表達式和對象聲明之間的語義差異 對象表達式和對象聲明之間有一個重要的語義差別: 對象表達式是在使用他們的地方立即執行的

原创 Kotlin Any 注意

Any類型是Kotlin所有非空類型的超類型(非空類的根),包含像Int這樣的基本數據類型。 在Kotlin中,把基本類型的值直接賦值給Any類的變量時會自動裝箱 Any是非空類,所以Any類型的變量不持有null值。如果你需要可以持有任何

原创 Kotlin 枚舉類 相關屬性、方法 枚舉自定義屬性 枚舉自定義方法

枚舉類最基本的用法是實現一個類型安全的枚舉。 枚舉常量用逗號分隔,每個枚舉常量都是一個對象。 enum class Color { RED,BLACK,BLUE,GREEN,WHITE } 相關屬性、方法 枚舉類具有兩個屬性兩個方

原创 Kotlin 泛型 泛型約束 型變 星號投射

泛型,即 "參數化類型",將類型參數化,可以用在類,接口,方法上。 與 Java 一樣,Kotlin 也提供泛型,爲類型安全提供保證,消除類型強轉的煩惱。 聲明一個泛型類: class Box<T>(t: T) { var valu

原创 android bugly關於混淆後如何知道正確代碼

該文章適合瞭解bugly和Android混淆的人看,如果不瞭解,也可以下面簡單瞭解。 bugly: 騰訊自制,是個4,5句代碼就能簡單加入在線更新、捕獲異常的好功能,後臺也是使用騰訊的。 Android混淆: 啓用一個配置,把所有變量、類名