原创 從UI系統的設計角度認識flutter三棵樹

前言 剛接觸flutter開發的同學肯定對一個概念不陌生:三棵樹,分別是widget樹,element樹和renderobject樹。然後大家就開始搜三棵樹的各種原理,創建流程了。但是,今天我想從一個不同的角度來談談這三棵樹的認知,那就是設

原创 從設計角度學習Android動畫

前言 一般來說,如果不是項目中經常需要用到很多的動畫,大家可能只是對Android動畫的原理有一點點了解,比如Android的view動畫只是修改繪製,所以點擊事件還是留在原來的位置,比如,屬性動畫修改的是具體的屬性,所以點擊事件位置會隨着

原创 Glide架構設計藝術

自從Android誕生以來,Bitmap的管理就一直是大問題,爲了更好的管理它,不同的圖片加載框架不斷的被推出,從剛開始的ImageLoader,到Picasso,再到現在的Fresco和Glide,可謂百花齊放。然而前兩者現在都已經不再維

原创 如何開發一款高性能的gradle transform

前言 對於java開發者來說,大家好像都比較喜歡在編譯期間搞事兒,比如爲了做到AOP編程,大家都喜歡利用字節碼生成技術,常用的有無痕埋點,方法耗時統計等等。那麼Android中具體是如何做到這些的呢?所謂字節碼插樁技術,其實就是修改已經編譯

原创 AMS——Activity管理之Activity的啓動銷燬流程

身爲四大組件之一,Activity可以說是和我們開發人員打交道最多的組件了,大家平時開發時可能對這個組件都有一些疑惑,比如爲什麼啓動一個activity是一個重量級行爲呢(因此好多人習慣使用fragment代替activity),activ

原创 Android繪製原理之刷新機制

我們都知道,Android是16ms刷新一幀,而通常我們所理解的刷新是“每個view的draw()方法被調用”,所以這裏就有一個問題了,Android系統底層每隔16ms就發出一個垂直同步信號,那麼是不是每個view的draw()方法都會每

原创 ConcurrentHashMap源碼分析(JDK1.8)——擴容

前言 在分析ConcurrentHashMap之前,希望大家先讀完HashMap的源碼,因爲ConcurrentHashMap基本算法和HashMap是一致的,只是增加了併發控制而已,有了HashMap的基礎才能更好的理解Concurren

原创 Android模塊化中的服務發現機制

前言 本文討論的其實是項目經過模塊化後的一種情況,如果沒有模塊化需求其實是無所謂的。如果項目已經進行了模塊化,推薦大家花幾分鐘看下。 需求 首先,我們來看一張常見的模塊化後的圖: 然後我們有這樣一個需求,我希望在app中獲取所依賴的所有

原创 HashMap源碼分析

在看本文之前,強烈建議去讀下我的上一篇文章HashMap的hash機制詳解 ,有了這個基礎後本文才更容易理解。 在分析源碼之前,這裏對整個HashMap機制大致做下介紹,HashMap還是基於hash表的數據結構,解決hash碰撞用的也是

原创 HashMap的hash機制詳解

HashMap可謂是面試中的高頻熱點問題了,一般可能也就面試前突擊複習下,背些知識點,面試後可能就忘了,爲了做到不遺忘,我們需要徹底弄懂它的機制。 Hash表介紹 首先我們看一張經典的圖: 這裏有一個大小爲16的數組,比如說我現在有一個整

原创 以JDBC爲例談雙親委派模型的破壞

java本身有一套資源管理服務JNDI,是放置在rt.jar中,由啓動類加載器加載的。以對數據庫管理JDBC爲例, java給數據庫操作提供了一個Driver接口: public interface Driver { Co

原创 ClassLoader之淺談雙親委派模型

Java的ClassLoader一直是一個很神奇的東西,很多黑科技都離不開它的存在,想要成爲高級java工程師,它也基本是面試必問的,之前想要學習一直不得法,最近琢磨出一點味道了,分享給大家。 ClassLoader爲何存在? java源文

原创 OkHttp源碼之socket連接池

在整個okhttp中,相對來說最耗資源的應該屬於socket連接了,所以爲了節省tcp的連接釋放以及TLS協議的握手等時間,socket連接池是必不可少的。研究它的連接池,我們重點關注以下兩點: socket複用有何標準 一個socket

原创 從零開始寫攔截器

攔截器的應用是非常廣泛的,okhttp中有攔截器,spring框架中也有攔截器,這個年代,你要是不知道什麼是攔截器你都不好意思說你是程序員。爲了防止大家不好意思出門打招呼,今天我帶大家從零開始寫一個簡單的攔截器。 需求 我們初始需求就是對一

原创 OkHttp源碼之緩存文件的併發控制

在前兩篇文章中我們詳細的介紹了okhttp緩存文件的結構,緩存的詳細讀寫過程以及緩存文件的清理機制,今天,我們大致介紹下緩存文件最複雜也是最容易出錯的部分:併發控制 涉及的所有文件 在開始之前,我們先分析下整個okhttp緩存過程中涉及到了