原创 暴力突破 Java 併發 - synchronize 解析

一、前言 當存在多個線程操作共享數據時,需要保證同一時刻有且只有一個線程在操作共享數據,其他線程必須等到該線程處理完數據後再進行,這種方式有個高尚的名稱叫互斥鎖,即能達到互斥訪問目的的鎖,也就是說當一個共享數據被當前正在訪問的線程加上互斥

原创 暴力突破 Android 編譯插樁(七)- AspectJ 使用

專欄:暴力突破 Android 編譯插樁系列 一、AOP 理解 在 Java 當中我們常常提及到的編程思想是 OOP(Object Oriented Programming)面向對象編程,即把功能或問題模塊化,每個模塊處理自己的事務。但在

原创 Android Memory Profiler、CPU Profiler、MAT 解決內存問題實戰

一、前言 內存問題的分析工具有很多種,這裏我們選擇常見的三種進行學習和實戰。   二、工具使用 2.1 Memory Profiler 如上圖所示,我們可以獲取指定時間的當前內存分配情況。在左下角的類列表中,您可以查看以下信息: All

原创 Android ListView 重難點解析

一、基本使用  我們先來看看 ListView 的 Adapter 一般是怎麼寫的: public class FruitAdapter extends ArrayAdapter<Fruit> { private int re

原创 Java 集合 - HashTable 解析

一、前言 Hashtable 與 HashMap 都是 Map 族中較爲常用的實現,也都是 Java Collection Framework 的重要成員,它們的本質都是 鏈表數組。下面我們來學習一下 HashTable。   二、Has

原创 暴力突破 Java 併發 - Lock 顯示鎖解析

一、前言 前面《暴力突破 Java 併發 - synchronize 解析》我們詳談過解決多線程同步問題的關鍵字 synchronized,synchronized 屬於隱式鎖,即鎖的持有與釋放都是隱式的,我們無需干預,而本篇我們要講解的

原创 Android 手把手進階自定義View(五)- MaterialEditText

一、前言 本篇我們來學習拓展已有的 View,比如繼承 EditText 來對它進行拓展。要實現的效果如下:   二、MaterialEditText 分析一下,首先第一步,預留浮動文字的距離。可以在初始化時通過 setPadding

原创 Android 手把手進階自定義View(十七)- 自定義 ViewPager

一、基礎準備 在上一篇 Android 手把手進階自定義View(十六)- 滑動衝突 中最後的實例其實我們已經實現了一個簡單的自定義 ViewPager,只不過上一篇我們的重點是滑動衝突,所以沒具體解釋 ViewPager 裏的一些觸摸反

原创 Android 手把手進階自定義View(四)- 三維變換

一、基礎準備 本篇我們來學習一下自定義 View 中使用 Camera 來做三維變換,先看一下 自定義 View 1-4 Canvas 對繪製的輔助 clipXXX() 和 Matrix   二、Camera 介紹  先來看看適用 Cam

原创 暴力突破 Java 併發 - volatile 原理解析

一、JAVA 內存模型 學習 volatile 這塊知識必須要對 JAVA 內存模型(Java Memory Model,JMM)有一定的認識,所以先簡單講一下 JAVA 內存模型。 Java 內存模型規定了所有的變量都存儲在主內存中。

原创 Android 手把手進階自定義View(一)- 基礎繪製

一、基礎準備 1.1 自定義View相關API  首先來學一下自定義 View 基本的 API,推薦看看下面這幾篇博客,介紹得非常詳細: 自定義 View 1-1 繪製基礎自定義 View 1-2 Paint 詳解自定義 View 1-

原创 Android 手把手進階自定義View(十二)- 縮放手勢檢測 ScaleGestureDetector

一、前言 Android 縮放手勢檢測 ScaleGestureDetector,在大多數的情況下縮放手勢都不是單獨存在的,需要配合其它的手勢來使用,如果是用在自定義的控件上,則需要配合 Matrix 相關內容使用起來可能會更加方便。縮放

原创 暴力突破 Java 併發 - 線程間的協作(wait、notify、notifyAll、yield、join)

一、線程的狀態 Java 中線程中狀態可分爲五種: New:新建狀態,當線程創建完成時爲新建狀態,即new Thread(...),還沒有調用start方法時,線程處於新建狀態。 Runnable:就緒狀態,當調用線程的的start方法後

原创 Android 手把手進階自定義View(十四)- ScalableImageView

一、基礎準備 Android 手把手進階自定義View(十)- 事件分發機制解析Android 手把手進階自定義View(十一)- 手勢檢測 GestureDetectorAndroid 手把手進階自定義View(十二)- 縮放手勢檢測

原创 暴力突破 Java 併發 - CAS 解析

一、CAS 概念 在 JDK 5 之前 Java 語言是靠 synchronized 關鍵字保證同步的,這會導致有鎖,鎖機制存在以下問題: 在多線程競爭下,加鎖、釋放鎖會導致比較多的上下文切換和調度延時,引起性能問題。 一個線程持有鎖會導