原创 手把手帶你從源碼的角度全面理解Handler、Looper、MessageQueue之間的關係

目標: 首先要明確幾個目標,我們要解決以下幾個問題: a.線程是如何與Looper關聯起來的? b.一個線程裏面可以有幾個Looper? c.消息是怎麼從一個線程傳遞到另一個線程的? d.Handler、Looper、Messa

原创 你所不知道的RXJava2.0

我們講Flowable的時候,說它採用了響應式拉的方式,我們還舉了個葉問打小日本的例子,再來回顧一下吧,我們說把上游看成小日本, 把下游當作葉問, 當調用Subscription.request(1)時, 葉問就說我要打一個! 然後小日本

原创 App性能之優化

今天聊下個人比較慣用的一些App性能測試和分析工具, 先上個圖: ![性能分析工具] tools_mind_node 本文暫不對工具的使用做過多的深入. 在後續的具體實例中會具體說明怎麼用這些工具來達成分析目的和解決問題的.

原创 Robust 接入

前言 Robust熱更新系統借鑑Instant Run原理,實現了一個兼容性更強而且實時生效的熱更新方案。其基本思路是,Robust熱更新系統在一個方法的入口處插入一段跳轉代碼,當發現某個方法出現bug就跳轉執行補丁中的代碼,略過原有代

原创 關於RxJava最友好的文章——背壓(Backpressure)

前言 背壓(Backpressure)可能是所有想要深入運用RxJava的朋友必須理解的一個概念。 關於它的介紹,我本意是想寫在RxJava2.0更新介紹的文章裏的,可是寫着寫着發現,要完整介紹這個概念需要花費的篇幅太長,恰好目前對於背壓

原创 從Java垃圾回收機制窺探內存優化

回答一個疑問 這篇文章講的是Java的JVM的垃圾回收機制,但是Android使用的虛擬機是Dalvik或者ART,那麼下面講的垃圾回收機制是否適用於Android呢? 答案是,Yes,是可以類比的。 (增補) 文章末尾有人提出了質疑:

原创 Android webView的cookie機制

原理分析: > WebView是基於webkit內核的UI控件,相當於一個瀏覽器客戶端。它會在本地維護每次會話的cookie( 保存在data/data/package_name/app_WebView/Cookies.db)。 如圖:

原创 android強大的SpannableStringBuilder

SpannableStringBuilder和SpannableString的區別類似與StringBuilder、String,就是SpannableStringBuilder可以拼接,而SpannableString不可拼接。 主要

原创 Java多線程-工具篇-BlockingQueue

前言: 在新增的Concurrent包中,BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數據的問題。通過這些高效並且線程安全的隊列類,爲我們快速搭建高質量的多線程程序帶來極大的便利。本文詳細介紹了Bloc

原创 Http gzip的壓縮原理

進入主題之前,我們先來看一下客戶端與服務器通信過程中,如果服務器支持,HTTP gzip壓縮是如何實現的? 如圖所示: request header中聲明Accept-Encoding: gzip,告知服務器客戶端接受gzip的數據。

原创 如何在Java中使用雙重檢查鎖實現單例

單例類在Java開發者中非常常用,但是它給初級開發者們造成了很多挑戰。他們所面對的其中一個關鍵挑戰是,怎樣確保單例類的行爲是單例?也就是說,無論任何原因,如何防止單例類有多個實例。在整個應用生命週期中,要保證只有一個單例類的實例被創建,雙

原创 RxJava操作符

RXJAVA地址: https://github.com/ReactiveX/RxJava 0.什麼是觀察者模式 1.RXJAVA是什麼 2.最簡單的DEMO 在Rxjava當中最重要的就是操作符,RxJava當中有着龐大的操作符 創建操