原创 性能優化系列(二)告別卡頓與 ANR —— 計算性能優化

上一篇文章 渲染性能優化 中,我們分析了 UI 可能引起卡頓原因。卡頓的因素有很多,UI 只是其中一個因素。應用是否流暢往往也與 CPU 的計算性能有關,接下來我們從代碼上來分析下引起性能問題的因素。 ArrayMap 與 Has

原创 找出卡頓的元兇 —— 渲染性能優化

一個 Android 應用是否流暢,或者說是否存在卡頓、丟幀現象,都與 60fps 和 16ms 有關。那麼這兩個值是怎麼來的呢?爲什麼以這兩個值爲衡量標準呢?本文主要討論下渲染性能方面決定 Android 應用流暢性的因素。 爲

原创 字節碼指令

虛擬機是一個相對於物理機的概念,這兩種機器都有代碼執行能力,其區別在於物理機的執行引擎是直接建立在 CPU 處理器、指令集、操作系統和硬件層面上的。 而虛擬機的執行引擎則由自己實現,因此可以制定自己的指令集和執行引擎的結構體系,而

原创 字節碼文件結構

我們都知道 .java 文件在執行之前會編譯成 .class 文件後再執行。比如下面的代碼: package com.jeanboy.jvm; public class HelloWorld { public stat

原创 TreeMap 源碼分析(下)

引言 通過上一篇TreeMap 源碼分析(上)的分析,我們已經瞭解了紅黑樹插入數據的操作,本文我們繼續來分析紅黑樹刪除數據的操作。 紅黑樹的刪除 將紅黑樹內的某一個節點刪除。需要執行的操作依次是:首先,將紅黑樹當作一顆二叉查找樹,

原创 TreeMap 源碼分析(上)

簡介 TreeMap 最早出現在 JDK 1.2 中,是 Java 集合框架中比較重要一個的實現。TreeMap 底層基於 紅黑樹 實現,可保證在 log(n) 時間複雜度內完成 containsKey、get、put 和 rem

原创 Android 簽名機制 v1、v2、v3

什麼是簽名? 要想知道簽名是什麼,先來看爲什麼需要簽名 ? 瞭解 HTTPS 通信的同學應該知道,在消息通信時,必須至少解決兩個問題:一是確保消息來源的真實性,二是確保消息不會被第三方篡改。 在安裝 APK 時,同樣需要確保 AP

原创 聊聊 Activity 棧的親和關係

launchMode <activity android:name=".ui.activity.TaskAffinityActivity" android:launchMode="singleTask" /> stan

原创 很少有人知道的 ContentProvider 使用技巧

簡介 ContentProvider 是 Android 的四大組件之一,可見它在 Android 中的作用非同小可。 它主要的作用是實現各個應用程序之間的(跨應用)數據共享,比如聯繫人應用中就使用了ContentProvider

原创 圖解 Android 系列(四)原來 SystemServer 啓動時幹了這麼多

介紹 這是一個連載的系列「圖解 Android 系列」,我將持續爲大家提供儘可能通俗易懂的 Android 源碼分析。 所有引用的源碼片段,我都會在第一行標明源文件完整路徑。爲了文章篇幅考慮源碼中間可能有刪減,刪減部分會用省略號代

原创 LinkedList 源碼分析

簡介 LinkedList 是 Java 集合框架中一個常用的集合類,底層採用雙向鏈表結構。和 ArrayList 一樣,LinkedList 也支持空值和重複值。 由於 LinkedList 基於鏈表實現,存儲元素過程中,無需像

原创 最通俗易懂的 Handler 源碼解析

簡介 在 Android 中 UI 線程是不安全的,如果在子線程中嘗試進行更新 UI 操作,程序就有可能會崩潰;當然如果在 UI 線程中做耗時的操作,系統就會彈出 ANR 彈窗提示該程序無響應,十分影響用戶體驗。 Android

原创 圖解 Android 系列(三)探索 SystemServer 進程創建過程

介紹 這是一個連載的系列「圖解 Android 系列」,我將持續爲大家提供儘可能通俗易懂的 Android 源碼分析。 所有引用的源碼片段,我都會在第一行標明源文件完整路徑。爲了文章篇幅考慮源碼中間可能有刪減,刪減部分會用省略號代

原创 【生活常識】如何能安逸的活着?

經常看到朋友圈轉發各種 xx 籌,點開的內容基本一致,得了 xx 病急需 xx 萬元醫療費,希望大家能獻獻愛心等等。 最開始看到這些我都會伸出援助之手,但後來發現越來越多。直到看到了一篇報道說,一位年入百萬的老闆發起了幾十萬的

原创 圖解 Android 系列(二)深入理解 init 與 zygote 進程

介紹 這是一個連載的系列「圖解 Android 系列」,我將持續爲大家提供儘可能通俗易懂的 Android 源碼分析。 所有引用的源碼片段,我都會在第一行標明源文件完整路徑。爲了文章篇幅考慮源碼中間可能有刪減,刪減部分會用省略號代替。