原创 Android Handler機制的工作原理

寫在前面 上一次寫完Binder學習筆記之後,再去看一遍Activity的啓動流程,因爲了解了Binder的基本原理,這次看印象會更深一點,學習效果也比以前好很多。本來打算直接來寫Activity的啓動流程的,但總覺得Handler也需要寫

原创 Android Binder 學習筆記

寫在前面 Binder是Android給我們提供的一種跨進程通信方式。理解Binder能幫助我們更好的理解Android的系統設計,比如說四大組件,AMS,WMS等系統服務的底層通信機制就都是基於Binder機制的。當然了,Binder機制

原创 Android架構組件(Architecture Components)之 ViewModel詳解

寫在前面 組件架構三劍客終於來到了最後一篇:ViewModel,關於Lifecycle和LiveData可以看之前的文章。ViewModel和Lifecycle和LiveData的關聯並不大,可以單獨拿出來使用。這裏用的依賴主要是Andro

原创 Android apk瘦身實踐

寫在前面 最近剛做了一波apk瘦身優化,瘦身後apk大小降低了19%左右。打鐵要趁熱,趕緊記錄一下先。 APK Analyzer的簡單使用 工欲善其事,必先利其器。就像分析卡頓問題要善用Systrace和TraceView,分析內存問題要善

原创 Android架構組件(Architecture Components)之 LiveData詳解

寫在前面 在上一篇文章Android架構組件(Architecture Components)之 Lifecycle詳解中,說到了要想了解LiveData,需要先了解Lifecycle。所以這次就開始來講講LiveData了。希望還沒看過的

原创 Android架構組件(Architecture Components)之 Lifecycle詳解

前言 在Android推出的架構組件Architecture Components中,LiveData和ViewModel無疑是最核心的。它們最神奇的地方就在於: LiveData:能夠在數據發生變化時及時通知View去更新界面,並且如果

原创 三個場景帶你瞭解RecyclerView

說明: RecyclerView的版本是23.2.1,RecyclerView的佈局爲match_parent,使用到的LayoutManager爲LinearLayoutManager。如果你真想搞懂這幾個場景的代碼,建議自己寫個demo

原创 Handler.post()方法的執行時機

平時使用Handler的時候,我們都知道調用了Handler.sendMessage()方法後,消息會在handleMessage()中被處理,或者調用了Handler.post()之後,Runnable會被在一定的時機下得到執行。但至於什

原创 Glide緩存機制

前言 本文基於Glide v3.7.0源碼分析,Glide v4.0大致流程和v3.7.0差不多,在一些技術細節上有修改。主要內容有: 內存緩存讀取 內存緩存寫入 緩存引用計數 硬盤緩存讀取 硬盤緩存寫入 內存緩存讀取 內存緩存相關代碼

原创 Java反射

getXXX & getDeclaredXXX getFields() 方法只能獲得某個類及其父類中的所有的 public 字段,而 getDeclaredFields() 方法卻能獲得某個類(不包括父類)的所有字段(包括 public、p

原创 Android Bitmap 到底佔了多少內存

前言 在Android的內存優化中,對Bitmap的優化絕對是主角,因爲Bitmap對內存的影響很大,稍有不慎就很容易引起OOM的問題。不信的話就隨我來看看Bitmap到底能吃掉多少內存。 預備知識 本篇文章不會講到任何源碼的東西,但還是需

原创 Android自定義View之頭像選擇控件

前言 頭像選擇控件大概是現在90%以上的App必備的控件了吧。實用性還是蠻高的,記得以前在做畢業設計的時候也需要用到頭像選擇,然而當時時間比較趕,就沒有去研究怎麼實現了,直接選擇完圖片後設置回去了,不能縮放,移動,可以說毫無體驗性可言。所以

原创 應用冷啓動優化分析

前言 關於冷啓動的優化方法,網上已經有很多的文章了,總結起來,大概有以下幾種優化方式: 優化佈局,這一步是最簡單的,然而如果你的佈局不是特別重的話其實優化後效果也不明顯。 異步加載,現在一個app都會使用各種各樣的第三方SDK,這些SDK

原创 Android自定義View之繪製虛線

老實說,第一次看到這個需求的時候,第一反應就是Canvas只有drawLine方法,並沒有drawDashLine方法啊!這咋整啊,難道要我自己做個遍歷不斷的drawLine?不到1秒,我就放棄這個想法了,因爲太噁心了。方法肯定是有的,只不

原创 Android 啓動優化之延時加載

前言 在應用啓動的時候,爲了加快啓動速度,往往需要把一些比較重的操作放到子線程中,或者是延時加載。將任務放在子線程中是一個比較簡單並且看起來有效的操作,但是呢,也不能太過於依賴子線程,它雖然不會阻塞主線程,但是卻會跟主線程搶佔CPU,當子線