原创 Retrofit中使用@PartMap實現帶進度回調的文件上傳

  因項目重構需要,最近一直在研究Retrofit的使用,並且封裝成適合自己項目的網絡請求框架。因爲我們的項目中已經和後臺約定,所有請求都使用POST請求,並且只接受JSON格式的參數,返回結果也是JSON格式。因此,我要封裝的網

原创 適應RxJava2思維習慣

RxJava有幾個重要關鍵字,即函數響應式編程,觀察者模式,事件發射,消費等等。以下這段話摘自其他文章Android 響應式編程 RxJava2 完全解析。鳴謝作者。 響應式編程的組成爲Observable/Operator/S

原创 Android的非Google官方衍生品

Android的非Google官方衍生品什麼是Android的Google官方衍生品Android WearAndroid AutoAndroid TVAndroid的非Google官方衍生品亞馬遜FireOS不帶上層UI的And

原创 怎樣將自己的工程改造成庫,並上傳到Github作爲依賴

  在Eclipse時代,也許你會在工程中依賴本地的另一個工程,或者把一個工程打成jar包並引入到另一個工程,又或者你公司的後臺架構師會把通用的代碼(比如bean)打成jar包後放到中央倉庫,然後需要使用時配置Maven的pom.xml文

原创 Android源碼中的觀察者模式

        工作這麼久,看過這麼多別人的技術博客,還沒有在自己的賬號上寫點什麼,實在慚愧。與其說要把自己的經驗寫出來給大家分享,不如說我想記錄一下此刻自己的所思所得,以便日後查看。         早在本科時期就接觸過一本書叫《大話設

原创 Builder模式演義(2)——OkHttp源碼中的Builder模式

引言   在上一篇Builder模式演義(1)中介紹了Builder模式的標準形式,以及兩種基本變換——鏈式調用和省略指揮者角色。本文將通過分析OkHttp源碼闡述Builder模式的另外兩種變換——省略抽象Builder角色和Produ

原创 深入淺出Java四種引用

深入淺出Java四種引用(未完)   Java的四種引用已是老生常談了,一般由內存泄露的解決辦法引出。然而真正理解其背後的設計原理,並靈活應用它們不是一件容易的事。以下是四種引用的基本概念,但如果你以爲這是一篇 “概念解釋+使用場景+示例

原创 Java 內存從分配到泄露

引言   如果你被問及Android內存泄露,而你只能背出幾種常見的內存泄露的場景以及解決方案,卻不能從更深層次的原理上去解釋它,那麼是時候補一補Java虛擬機的基礎知識了。文章較長,請耐心閱讀,相信會有所收穫。 Java內存區域劃分  

原创 Android面試遇到的問題(2)

Android有哪幾種Window類型? 應用Window 應用類Window對應着一個Activity。 z-ordered: 1~99 子Window 子Window不能單獨存在,它需要附屬在特定的父Window之中,比如常見的

原创 Builder模式演義

引言   不用懷疑,你一定遇到和使用過它,它在Android源碼和各種開源組件中是如此常見。這是一種你可以不知道怎麼運用,但是知道了會欲罷不能的設計模式。 定義   Builder模式(建造者模式,有人稱作生成器模式),將一個複雜對象的構

原创 Android面試遇到的問題(1)

數據結構和算法類 順序表和鏈表的區別? 順序表隨機訪問快,插入刪除慢;鏈表插入刪除快,隨機訪問慢。 棧和隊列的區別? 棧:先進後出,隊列:先進先出 常用的排序算法有哪些? 冒泡排序、選擇排序、快速排序、堆排序等。 快速排序的

原创 LeakCanary使用指南(1)

引言   還在爲不會使用MAT而煩惱嗎?還在對着MAT工具解析出的hprof圖拼命找內存泄露的源頭嗎?放棄掙扎吧,少年。Android Studio時代,我們使用LeakCanary——傻瓜式的內存泄露檢測工具。如果你想了解引發Java內

原创 Retrofit2提交JSON格式的數據

  爲了跟上Android開發的技術潮流,最近在研究Retrofit。自己也嘗試在此基礎上封裝適合自己的網絡請求框架。工作的項目中所有請求都約定爲POST並且請求參數和響應結果都是JSON格式的。於是開始搜索“Retrofit提交JSON

原创 使用Fiddler對手機進行抓包

  作爲一個程序員,使用工具對網絡請求進行抓包已經不是什麼新鮮事。本文的關注點不是如何使用Fiddler抓取PC端Web的HTTP請求,或者模擬發起HTTP請求。而是使用Fiddler抓取手機端的HTTP請求。這裏的抓取、抓包都是通俗的叫

原创 理解裝飾者模式

引言   Android面試經常被問到設計模式,而裝飾者模式被問到的概率尤其高。也許你在開發中或多或少遇到過類似這樣的代碼: BufferedInputStream bis = new BufferedInputStream(new Fi