原创 JetPack 之 LiveData 使用及源碼分析

LiveData 是在 Lifecycle 的基礎上發展起來的,我們看看例子可以知道,需要藉助於 ViewModel,我們來看個例子 public class LDActivity extends AppCompatActivity i

原创 JetPack 之 Lifecycle 處理生命週期

在 Android 中,聲明週期是個很重要的概念,內存泄漏都是因爲聲明週期沒處理好導致的, Jetpack 中推出的 LifeCycle ,可以說是專門爲了處理各種控件的聲明週期存在的。它使用起來也很簡單,就是個觀察者模式,通過註解來實現

原创 JetPack 之 DataBinding 的使用

android 幾年前推出了 Jetpack 控件,其中有個 DataBinding ,這個框架能極大的簡化我們需要寫 findViewById()、setText()、setVisibility()、setEnabled() 以及 se

原创 android 自定義控件之文字(新聞熱門置頂等標籤的效果)

之前項目中有個需求,需要在同一行展示n個標籤,標籤內容有 熱門、置頂、廣告、促銷、精緻 等等,都是兩個字的詞語,並且標籤外面需要有個圓角矩形包裹起來,我們可以直接看今日頭條的主界面的樣式,見下圖,途中只有一個標籤 我們項目中的情況與這個

原创 Android 中 gradle 之 groovy

Aandroid Studio 中使用 gradle 來管理一些信息,最早接觸時感覺挺麻煩的,後來才逐漸感覺到它的厲害之處。前幾年項目中接入了熱修復 Tinker,我看了看它的源碼,更感覺到腳本的厲害,還能動態的往 AndroidMani

原创 組件化的基礎知識

組件化的概念,在幾年前就提了出來,並且衍生出些框架,那麼什麼是組件化,爲什麼要用組件化?如果我們移動端項目比較小的話,團隊人也不多,一般情況下,業務邏輯也不會複雜,此時,按照常規寫代碼,沒什麼問題。但項目一旦大了,就像我們團隊,andro

原创 AOP 在android中的使用之埋點日誌

android 開發,我們通常使用的是面向對象編程,這個寫起來比較方便。但一些特殊的功能,比如說埋點統計些信息,或者打印某些方法的消耗時間,如果我們在要統計的地方直接寫代碼,看着不優雅,並且也把功能耦合在一起了。AOP 叫做切面編程,它更

原创 Tinker 熱修復引出的 Apt 功能及使用(定製 Application)

android 項目,稍微大一點的,都希望接入熱修復,好處是如果有bug,可以隨時修復,不用重新發版本升級;同時,也希望對發出去的版本添加一些新功能。H5是可以做到隨時更新,但牽涉到原生的交互,就沒那麼容易了,因此,前幾年熱修復是個熱門。

原创 併發工具類 CountDownLatch、CyclicBarrier、Semaphore 的用法

android 開發,我們會遇到一些併發場景,雖然不多,但還是有的。我們可以自己寫代碼解決併發問題,也可以藉助java提供的工具類。接下來就介紹幾個類及它們的使用場景。 CountDownLatch 是 java 1.5 時被引入的,它的

原创 ViewStub 使用及源碼解析

我們知道佈局優化有三個標籤,include 、merge 和 ViewStub。 我們可以把公共的佈局抽取到一個 xml 中,然後使用 include 來引用; 佈局會分層次,如果裏層和上一層是同樣的容器,則可以使用 merge,但記住一

原创 kotlin 中的數據類型、泛型、枚舉

Kotlin 中可以創建包含數據的類,使用的關鍵字爲 data,比如說 data class Student(val name: String, val age: Int),編譯器會自動重寫 equals() 、 hashCode() 、

原创 Toast 爲什麼會造成內存泄漏

我們知道,在使用 Toast 時,如果第一個參數傳入的是 Activity 的話,可能會造成內存泄漏,只要把 Activity 改爲 Application 即可解決問題,那麼爲什麼會造成內存泄漏呢? 前文分析過 Toast 的源碼及執

原创 Kotlin 集合循環及對象

前面講了For循環,遍歷時,語法如下 : for (i in collection) { print(i) } ,這是一個代碼塊,具體的比如說     val ints = arrayOf(1, 4, 5)     for (i :

原创 kotlin 繼承、接口和擴展

Java 中,所有的對象都默認繼承 Object,裏面有幾個默認的方法可以供我們重寫,常見的有 equals()、hashCode()、toString() 等方法;在 Kotlin 中,所有的對象默認繼承 Any, public op

原创 android 中動態加載廣告sdk

關於動態加載sdk的話題,網上介紹比較多;今天通過第三方工具來取個巧,雖然方法也有點不太靠譜,但終歸是一個思路。 項目裏面接入了穿山甲sdk和廣點通sdk廣告,結果放到應用市場時說被拒了,因爲有廣告,所以產品同學問能把廣告動態下發嗎,一天