原创 分析Android中的ANR

什麼是ANR Application Not Responding,意思就是程序未響應。 如果一個應用無法響應用戶的輸入,系統就會彈出一個ANR對話框,如下圖所示: 用戶可以自行選擇繼續等待,或者是停止當前程序。 ANR產生的條

原创 關於Bitmap的內存,加載和回收等

Bitmap加載圖片 Bitmap的加載離不開BitmapFactory類,關於Bitmap官方介紹: Creates Bitmap objects from various sources, including files,

原创 Java集合之ConcurrentModificationException(併發修改異常)分析

前言 今天寫LeetCode遇到一道題,我想利用作爲方法參數的一個集合作爲返回的值,來達到節省空間的目的: public List<Interval> merge(List<Interval> intervals) {} 意思就是

原创 第一個AndroidStudio插件,一鍵創建Activity

前言 之前寫過一個創建Activity的Gradle插件CreateActivityPlugin,但是使用起來並非像使用AndroidStudio自帶的功能new Activity一樣方便。 而且我也做了一些思考,覺得創建Activi

原创 DataBinding生成文件的時機

前言 上上週進行了DataBinding原理分析,但是並沒有對DataBinding如何生成文件進行研究。 如何生成文件,當然也利用了apt(annotation-processing-tool),apt在很多三方框架中都有使用,例如:B

原创 DataBinding原理分析

前言 現在公司用的框架是MVVM,用到MVVM肯定少不了databinding。 最近業務上遇到一個問題,需要動態生成一張圖片,並將圖片分享出去。我的思路就是寫一個xml動態生成一個View,利用databinding綁定這個View,然

原创 RecyclerView原理分析

前言 RecyclerView是谷歌官方出的一個用於大量數據展示的新控件,可以用來代替傳統的ListView,更加強大和靈活。 支持RecyclerView高效運行的主要六大類: Adapter:爲每一項Item創建視圖 ViewHol

原创 ARouter源碼分析

原理 ARouter在編譯期的時候,利用自定義註解完成了自動註冊。 ARouter的編譯 通過RouteProcessor。 process() process()方法相當於處理器的主函數main(),可以在這個方法中掃描、評估和處理註解

原创 Unsafe與CAS

Unsafe 簡單講一下這個類。Java無法直接訪問底層操作系統,而是通過本地(native)方法來訪問。不過儘管如此,JVM還是開了一個後門,JDK中有一個類Unsafe,它提供了硬件級別的原子操作。 這個類儘管裏面的方法都是publi

原创 LayoutInflater源碼分析

前言 最近又遇到RecyclerView的item最外層佈局參數失效的問題,之前都沒有去了解真正的原因,現在正好有空探尋一下這個問題,就從瞭解源碼開始吧。 View的inflate() 平時我經常使用View.inflate(),它是Vi

原创 LeakCanary源碼分析

概述 LeakCanary是用來檢測 Java 和 Android 內存泄露的工具。 LeakCanary的原理非常簡單。正常情況下一個Activity在onDestroy之後就要銷燬,LeakCanary做的就是在一個Activity

原创 初識Gradle

前言 Gradle是Android工程師的進階必備,最近我也開始慢慢了解Gradle。 本文不會花太多的篇幅介紹Groovy語法,主要是介紹Gradle的基本概念,和一些常見的用法。 先給大家安利一下官方文檔吧Gradle User Ma

原创 ReentrantLock實現原理分析

類圖 ReentrantLock相關類圖: AbstractOwnableSynchronizer類保持和獲取獨佔線程。 AbstractQueuedSynchronizer,繼承自AbstractOwnableSynchronize

原创 vlayout原理分析

前言 當我們使用RecylerView時,需要綁定一個Adapter和LayoutManager,而vlayout裏定義了VirtualLayoutAdapter(繼承自Adapter)和VirtualLayoutManager(繼承自L

原创 SparseArray原理分析

概述 Google推薦新的數據結構SparseArray。 SparseArray類上有一段註釋: SparseArrays map integers to Objects. Unlike a normal array of Obj