原创 (4.6.25.2)Android中爲什麼主線程不會因爲Looper.loop的死循環卡死

線程中死循環本來就是沒問題的,可以穩定運行 ANR是由於Message執行超時卡死的 Looper.loop的死循環其實是託管,實現了事件驅動,正常響應各種消費事件 要完全徹底理解這個問題,需要準備以下4方面的知識: Pro

原创 (4.6.25)Android ANR源碼原理分析

ANR即Application Not Responding,顧名思義就是應用程序無響應。 在Android中,一般情況下,四大組件均是工作在主線程中的,Android中的Activity Manager和Window Manag

原创 (4.6.25.1)Android ANR監測方案解析

目錄 一、ANR的觸發條件 二、Android對ANR的監控機制 三、應用ANR檢測方案 3.1 BlockCanary 3.2 ANR-WatchDog 3.3 SafeLooper 3.4 FileObserver 四、總結 ANR(

原创 (2.1.8.1)Java併發編程:synchronized之ConcurrentHashMap

文章目錄一、屬性二、主要構造函數三、主要方法3.1 putVal3.1.1 initTable3.1.2 tabAt3.1.3 casTabAt3.1.4 helpTransfer3.1.5 addCount Concurrent

原创 (4.0.22)嵌套RecyclerView中內層RecyclerView的緩存機制分析

文章目錄一、RecyclerView的複用機制1.1 複用機制的核心1.1.1 getChangedScrapViewForPosition(mState.isPreLayout())1.1.2 getScrapOrHiddenO

原创 (15.1.23)Feed流設計

一、Feed流系統特點 Feed流本質上是一個數據流,是將 “N個發佈者的信息單元” 通過 “關注關係” 傳送給 “M個接收者”。 有一方是消息生產者。 有一方是消息消費者。 生產者產生的一條消息可能會被一個或多個消費者消費。

原创 (4.2.33)Google出品的Protocol Buffer

文章目錄參考文獻 序列化的本質:對數據進行編碼 + 存儲 Protocol Buffer的性能好:傳輸效率快,主要原因 = 序列化速度快 & 序列化後的數據體積小,其原因如下: 序列化速度快的原因: a. 編碼 / 解碼

原创 (4.6.10.3)Binder傳輸數據大小限制

文章目錄一、TransactionTooLargeException二、Intent攜帶信息的大小受Binder限制三、在Binder驅動中mmap的具體實現中還有一個4M的限制參考文獻 oneway(異步) 一、Trans

原创 (4.6.10.2)Android LoadedApk詳解

文章目錄一、LoadedApk的構建函數和成員變量二、LoadedApk的在ActivityThread中的獲取三、LoadedApk的mApplication創建Application實例四、LoadedApk的mResourc

原创 (4.1.10.5)ThreadLocal原理

什麼是ThreadLocal? 如果你從字面上來理解,很容易將ThreadLocal理解爲『本地線程』,那麼你就大錯特錯了。 首先,ThreadLocal不是線程,更不是本地線程,而是Thread的局部變量,也許把它命名爲ThreadLo

原创 (4.6.19.8)殺不掉的知乎 - 聊一聊 Android 的多任務保活

不知道大家平時使用 APP 的時候,有沒有碰到過下面這種情況:       這是我在最近使用知乎的時候出現的,可以看到在任務列表裏面看不到知乎,但很明顯它還在運行中。你現在打開知乎看大概率是正常的,原因後面會提到。 通常要殺掉一個 AP

原创 (4.1.15.3)子線程更新UI校驗 viewRootImpl的checkThread

Android每次刷新UI的時候,最終根佈局ViewRootImpl.checkThread()來檢驗線程是否是View的創建線程。 由於Android是通過Handler消息機制的方式刷新UI的。所以Android 的UI控

原创 (4.6.12)Android Resource詳解

文章目錄一、構造函數1.1 成員變量1.2 構造函數1.3 提供功能1.3.1 getString(int id)、getIntArray(int id) 、getStringArray(int id)1.3.2 基於getVa

原创 (4.0.22.9)RecyclerView中的itemView的Move事件被Cancle

我們以RecyclerView爲例,看下爲什麼引發了這種“在DOWN的時候就決定了targetView是item,後面的事件move是怎麼給recyclerView的” MOTION_DOWN 父控件recyclerView

原创 (4.0.22.8)RecyclerView的空白區域點擊響應

在項目中使用RecyclerView嵌套RecyclerView,其中內部RecyclerView使用到了GridLayoutManager,在遇到item個數不滿足一行時,會在頁面右側透出空白位, 如下圖所示. 目前點擊空白位