原创 低容量STM8 Modbus協議移植與裁剪

1.freeModbus開源包的下載 一般STM8用的開發環境是IAR,所以這裏我們就講在IAR下移植FreeModbus, 下載freemodbus-v1.5.0,官方下載地址http://www.freemodbus.org

原创 EventBus 的源碼解析分析的四個要點

關於EventBus 的源碼解析網上有很多優秀的文章 https://www.jianshu.com/p/83e44261e095 我們這裏只需要總結歸納出 4個表 和 4種處理方式 ,可以串聯起整個EventBus的設計原理

原创 AMS啓動的下半段,AMS 到 Zygote fork進程到ActivityThread

AMS 到 Zygote fork進程前半段 ActivityStackSupervisor#startSpecificActivityLocked void startSpecificActivityLocked(Activi

原创 Android HAL硬件抽象層與硬件系統架構

背景     近幾年是互聯網高速發展的幾年,孕育出瞭如谷歌、阿里巴巴等許多超級互聯網公司,隨着互聯網的發展已經觸到了天花板,一個比互聯網更大的市場即將打開,那就是物聯網(Internet of Things)。IOT就是將現實世界

原创 設計模式與架構之美--Retrofit的那點事

前言 Retrofit 是一個 RESTful風格的 HTTP 網絡請求封裝框架,通過Retrofit使用,複雜的網絡請求可以通過幾行代碼就實現,大大提高了開發人員的開發調試效率。除了使用方便外,Retrofit最值得稱道的地方是

原创 IntentService 源碼分析

一般使用 1.自定義一個耗時的IntentService public class MyIntentService extends IntentService { /** * Creates an Inte

原创 SparseArray 源碼分析

主要方法分析 put方法 /** *放一個元素到集合 */ public void put(int key, E value) { int i = binarySearch(mKeys, 0, mSize, ke

原创 Android啓動源碼分析

1.首先進入的是init init是Linux系統中用戶空間的第一個進程(pid=1), Kernel啓動後會調用 Init.c的main()方法. 路徑:/system/core/init/Init.c int main(int a

原创 AsyncTask源碼分析

前言 AsyncTask在Android編程中是一種常用的異步編程方式,那麼AsyncTask到底是什麼呢?下面我們從 基本使用到源碼分析對AsyncTask作一個全面的瞭解。 一般使用 通常我們對AsyncTask的使用是 //1.

原创 字節碼操縱框架ASM

引言 在我們實際的開發過程中,很多場景需要AOP的編程思想,在開發者無感知地侵入式的插如自己的業務邏輯,比如我最近做的一個埋點統計的一些場景,在開發者無感知情況下,將生命週期上報執行邏輯代碼植入到我們現有的APP的某些頁面的Class

原创 AMS啓動的上半段,從Activty的startActivty啓動Activity過程

Activity#startActivity //從Activity的startActivity方法爲起點分析 //Activity#startActivity方法 public void startActivity(Intent

原创 AMS 到 Zygote fork進程到ActivityThread

AMS 到 Zygote fork進程前半段 ActivityStackSupervisor#startSpecificActivityLocked void startSpecificActivityLocked(Activity

原创 OkHttp 源碼分析

基本使用 //1. 創建OkHttpClient實例 OkHttpClient client = new OkHttpClient .Builder()

原创 EventBus 源碼分析

基本使用 //註冊EventBus EventBus.getDefault().register(this); //發送事件 EventBus.getDefault().post(new FirstEvent("nihao-->"))

原创 AndFix源碼分析

基本使用 //創建一個PatchManager實例 patchManager = new PatchManager(context); //初始化 patchManager.init(appversion);//current ver