原创 Glide之ActiveResource(一級內存緩存)

基本分析 ActiveResource是Glide中的一個內存緩存類,這個內存緩存類和LruResourceCache內存緩存類是不一樣的。 緩存到ActiveResources中的EngineResource是正在被使用的,也就是有其它

原创 Android之Dalvik 、ART

Dalvik和ART都是Android的虛擬機(VM),Dalvik是Android 5.0(2014年)之前使用的,ART是Android 5.0開始採用的。 Dalvik的執行引擎採用的編譯執行(通過即時編譯器JIT<just in

原创 Android DiskLruCache設計和源碼解析,最細節的分析

總體設計 網上有很多分析DiskLruCache源碼的文章,開篇想從更高層次的設計角度來說一下,這樣以後會想起DiskLruCache的時候能夠抓住重點,而不是深陷複雜的細節中,過一段時間回想還是不知道怎麼回事。 LruCache的設計和

原创 Android之 Bitmap

在Android中對Bitmap的技術優化是需要掌握的基礎技能,主要是緩存和複用。緩存不僅節約了用戶的流量,同時能夠快速加載,界面流暢了,提高了用戶體驗。複用,Bitmap是Android中內存消耗大戶,頻繁的分配和回收,會導致內存抖動,

原创 MVC 、MVP和MVVM

MVC、MVP到MVVM,我們可以理解爲是一個演化過程,它們三個角色(模塊)劃分是一樣的,M數據邏輯處理,V視圖展示處理,C/P/VM業務邏輯處理,不同的是角色之間的數據流向(溝通機制),數據一般是數據結構和事件。MVP是對MVC的改進,

原创 kotlin之匿名函數、lambda表達式

(1)匿名函數和普通函數沒什麼區別,只是沒有名字而已 (2)如果是單表達式的函數體,可以用賦值運算符代替大括號,而且可以省略返回值類型,編譯器可以推斷出是否有返回值,如果有類型是什麼類型。這個其實和匿名函數沒關係,普通函數也通用 (3)如

原创 git revert 和 reset 指令學習

revert revert的意思是反轉、撤銷,就是把某次或某些commit。這個功能在開發中很常見,比如我們commit一次,並且push到遠程倉庫了,發現提交錯了,想撤銷,可是我們不能刪除了別人push的commit,那麼我們只

原创 Mac NSDictionary 和Java HashMap比較

這兩個在實際開發中,都是用於存放key-value值的,所以放一塊記錄一下。 NSDictionay是不可變的,具體用法看參考,在java中好像沒有這種數據結構,至少我在開發中沒用過。NSDictionay也是可以用泛型的,可是好像很少有

原创 Markdown常用命令彙總

MarkDown頁面添加錨點,跳轉到本頁指定位置 markdown文件生成目錄的方式

原创 一文讓你搞懂各種虛擬機、解釋器、JIT和AOT編譯器

問題提出什麼是字節碼?爲啥要有字節碼的存在?不同VM的字節碼一樣嗎?VM對字節碼是怎麼執行的?Dalvik和ART發展歷程一些概念的解釋hot spotHotSpot VM自適應編譯(adaptive compilation)J

原创 java ThreadPoolExecutor(線程池)源碼,最細節明白的分析

文章目錄概述線程池狀態execute方法addWorker方法Worker類runWorker方法getTask方法processWorkExit方法tryTerminate方法shutdownshutdownNow自問自答爲啥每

原创 Mac OS鼠標事件監聽

Mac OS鼠標事件監聽簡述例子 簡述 NSView要想能監聽鼠標事件需要給view添加追蹤區域,一般是在NSView的模板方法updateTrackingAreas中設置。 例子 #import "CustomSlider.h"

原创 Thread中斷和InterruptedException處理

線程啓動是爲了去執行一些代碼,大家有沒有想過,要怎麼停止一個線程呢?線程執行完任務會自動停止的,這個大家都知道,可是,要想中途停止一個線程,尤其是阻塞中的線程,要怎麼做呢?Thread stop方法官方已經廢棄了,這種方式太暴力,會導致數

原创 Object C 循環引用問題

在Object C循環引用是大問題,稍微不注意就會出現循環引用導致泄露,副作用是導致崩潰,尤其是使用Block的時候 __weakObj(commonH5PagePanel) [commonH5PageP

原创 Android LruCache和Glide LruCache源碼分析

LruCache是實現了LRU算法的數據結構,方便開發者使用。LruCache實例化的時候,需要傳入緩存最大值的,這個最大值可以表示緩存元素的個數,也可以表示所以緩存元素的總大小,這個是根據實際業務需求來的,比如緩存Bitmap的話,我們