原创 Kotlin的一些使用技巧

一、Map的plus操作符 使用+ - 對map進行操作 /** * map的plus操作符 * 使用+ - 對map進行操作 */ @Test fun plus () {

原创 二十六、OkHttp原理分析(二)

前言 前面我們提到了Okhttp的五大攔截器,下面我們將分析每一個攔截器的具體作用。 一、RetryAndFollowUpInterceptor(重試和重定向攔截器) 重試和重定向截器顧名思義是用來負責請求的重試和重定向的。我們來看源碼的實

原创 二十四、外部攔截、內部攔截方法解決View 的事件衝突

一、前言 分別使用外部攔截、內部攔截方法解決SwipeRefreshLayout+ViewPager事件衝突問題,主要衝突爲SwipeRefreshLayout是縱向滑動,而ViewPager是橫向滑動。雖然本身源碼已經做好了相應的處理,爲

原创 二十五、OkHttp原理分析(一)

一、使用方式 OkHttp的使用分爲了同步請求和異步請求,分別通過調用execute和enqueue方法,在異步的時候需要傳入一個CallBack回調。當使用Get請求的時候,直接傳入URL,而在Post請求的時候需要構建RequestBo

原创 二十三、自定義View實現文字漸變效果(模仿今日頭條)

一、今日頭條效果 二、自定義實現效果 三、源碼實現 1、自定義View package com.haiheng.myskindemo; import android.content.Context; import android.gr

原创 二十一、Android虛擬機和類加載機制

一、Dalvik和ART虛擬機簡介 在Java開發中一般使用的是HotSpot虛擬機,而在Andrpid應用程序則是運行在Dalvik/ART虛擬機中,每一個應用程序對應一個單獨的Dalvik虛擬機示例。Dalvik也是Java虛擬機中的一

原创 二十二、自定義ViewGroup(流式佈局,類似flexbox效果)

一、谷歌現有FlexboxLayout的效果 二、自定義實現一個簡單的版本 MyFlowView(支持margin) 效果 直接貼源碼 package com.haiheng.myapplication import andr

原创 二十、理解對象與垃圾回收機制

一、虛擬機中的對象 1、對象的創建 我們知道在類加載中經歷了加載、驗證、準備、解析、初始化、使用、卸載幾個階段。 在初始化階段中當JVM遇到了一條new指令會經歷以下幾個階段: (1)檢查加載 檢查類是否被加載,如果加載失敗重新加載

原创 十九、JVM內存管理分析

一、JVM的運行過程 JVM虛擬機我們可以把它當做一臺虛擬出來的計算機,也有自己的內存管理如:堆、棧、方法區等。 JVM的作用是將字節碼翻譯成不同操作系統可以識別的機器碼執行。 運行過程如下圖: (1)我們寫的一個JAVA程序首

原创 十八、ThreadLocal實戰(模擬實現一個簡單版本的Handler)

1、創建Looper類 static class Lopper { static final ThreadLocal<Lopper> threadLocal = new ThreadLocal<Lopper>();

原创 十七、RxJava篇(RxJava模式與原理)

一、前言 之前我們說 RxJava是基於起點到終點,之間通過一條線連接,這條線裏我們可以做相應的攔截操作的這種編程思維。其實在規範的稱呼中RxJava是基於觀察者設計模式的一種響應式編程思維。從RxJava兩個關鍵對象就可以看到Observ

原创 十一、Java高級特性(阻塞隊列和線程池)

一、概念、生產者消費者模式 隊列 先進先出的一個數據結構 阻塞隊列 (1)當隊列爲空的時候,從裏面取數據的動作會被阻塞。 (2)當隊列滿的時候,往裏面放元素的動作會被阻塞。 生產者消費者模式 在生產者和消費者模式之間插入一個阻塞隊列。生產

原创 十六、RxJava篇(應用場景)

一、RxJava的核心思想 介紹RxJava的核心思想之前先來看一個例子 例子 在我們開發中,假如我們需要下載一張圖片,並且顯示出來,可以有多種方法,A可能使用new Thread+Handler來實現、B使用AsynTask來實現、C可

原创 十三、Java高級特性(AQS基本原理)

一、前言 AQS是AbstractQueuedSynchronizer類的簡稱,是JAVA中用來構建同步鎖的基礎框架。他內部通過使用了一個int類型的 state成員變量來表示同步鎖的狀態,通過內置的FIFO隊列來完成資源獲取線程的排隊工作

原创 九、Java高級特性(ThreadLocal的使用和原理分析)

一、前言 我們在前面學習知道對象和變量的併發訪問我們可以使用synchronized、volatile關鍵字。synchronized保證了數據的原子性,解決併發訪問同一數據的時候排隊執行。volatile保證了數據的可見性,使得在多線程共