原创 Flutter線程模型 消息隊列 單線程模型 在Dart裏面實現多線程 參考

事件循環在UI框架裏面應該算是一個常見的東西,例如安卓主線程裏面就有個Looper一直在MessageQueue裏面讀取事件。Flutter裏面也有類似的東西。 實際上Flutter的事件循環應該是Dart語言層面就支持的東西。Dart是單

原创 安卓BLE開發筆記(二) API使用指南 權限與功能 搜索藍牙設備 連接藍牙設備 Characteristic讀寫與監聽 配對 完整Demo

上一篇簡單介紹了Ble協議,這篇來看看安卓上的代碼具體要怎麼寫。 權限與功能 要在代碼中使用藍牙功能需要先申請到對應的權限,在AndroidManifest.xml文件中添加權限聲明 <uses-permission android:nam

原创 安卓BLE開發筆記(一) BLE協議入門 Ble設備發現 GATT協議結構 MTU

最近遇到了一個BLE的項目,花時間惡補了下相關的知識,這裏記錄下來備忘。這篇筆記是純協議的,先大概瞭解ble的協議和流程,能幫助我們更好的編碼 Ble設備發現 Ble設備的發現實際上靠的是Advertising(廣播)機制。廣播也有人管它叫

原创 記一個主線程卡死卻沒有ANR的BUG 問題定位與分析 ANR原理 感想

今天測試報了個BUG,分析了一波順利解決問題。但是感覺中間的一些思路、技巧和知識點比較有意思,所以記錄下來。 問題定位與分析 首先這個問題是是個概率性問題,在壓測整機復位功能的時候出現的。我負責的某個服務在開機的時候會自啓動,測試發現某一次

原创 源碼閱讀計劃-EventBus 註冊監聽的原理 消息分發原理

EventBus的api很簡單: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle

原创 Gradle構建原理 Gradle的構建的三個階段 Project的配置 Task Project、Task、Action間的關係 插件

Gradle的構建的三個階段 根據Gradle的官方文檔,Gradle的構建分成三個階段: Initialization (初始化) Gradle允許multi-project,也就是android studio裏面的項目+模塊的形式

原创 源碼閱讀計劃 - OkHttp複用連接池 Connect緩存 請求計數 請求限制 連接的斷開 低版本的清理流程

蠻久之前寫過一篇博客OkHttp源碼解析,相信大多數同學也看過或者瞭解過OkHttp的整體架構使用的是基於責任鏈模式的攔截器鏈。 其實這個庫的其他設計也是蠻有意思的,這篇筆記我們就來看看它的Http連接是怎麼實現的。 這部分的代碼我們從Co

原创 Kotlin帶接收者的lambda表達式 kotlin with方法的原理 kotlin apply方法的原理 anko原理 kotlin DSL設計

在學習kotlin協程原理的時候發現了一個比較有意思的東西: public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext,

原创 Android簽名與渠道包製作-V2/V3渠道包原理 渠道信息寫入 渠道信息讀取 完整代碼

系列文章: Android簽名與渠道包製作-V1版本 Android簽名與渠道包製作-V2/V3簽名原理 Android簽名與渠道包製作-V2/V3渠道包原理 上一篇文章我們詳細描述了V2/V3簽名的原理,大概的原理的就是在APK中插入

原创 Android簽名與渠道包製作-V2/V3簽名原理 zip包文件格式 V2簽名原理 V3簽名原理

系列文章: Android簽名與渠道包製作-V1版本 Android簽名與渠道包製作-V2/V3簽名原理 正如上一篇文章說的,V1版本的簽名機制漏洞在於它沒有給整個apk包做校驗,而且校驗的時候需要解壓。V2版本的簽名機制就是爲了解決這

原创 Android簽名與渠道包製作-V1版本 V1簽名原理 渠道包原理 完整代碼

系列文章: Android簽名與渠道包製作-V1版本 Android簽名與渠道包製作-V2/V3簽名原理 偶然發現安卓的簽名V3已經出到了版本,想想自己其實也沒有太深入瞭解過v1、v2。本着查漏補缺的想法把三個版本的原理都過了一遍,並且

原创 Glide源碼探究(四) - Bitmap複用機制 BitmapPoolAdapter LruBitmapPool

系列文章: Glide源碼探究(一) - 生命週期綁定與Request創建 Glide源碼探究(二) - 內存緩存 Glide源碼探究(三) - 網絡資源加載 Glide源碼探究(四) - Bitmap複用機制 現在的app界面越做越複

原创 Glide源碼探究(一) - 生命週期綁定與Request創建 Glide.with RequestManager.load RequestManager.into request的執行

系列文章: Glide源碼探究(一) - 生命週期綁定與Request創建 Glide源碼探究(二) - 內存緩存 Glide源碼探究(三) - 網絡資源加載 蠻久之前囫圇吞棗地瞄過Glide部分源碼,最近由於某個契機又心血來潮比較系統

原创 源碼閱讀計劃 - ARouter 初始化 navigation @Autowired自動注入原理

初始化 ARouter的源碼相對來講還是比較簡單易懂的,我們先從初始化部分的邏輯開始看。它的初始化代碼只有一行,一般放在Application.onCreate()中: ARouter.init(this) 我們最追進去可以看到它將實際的

原创 源碼閱讀計劃 - LiveData 註冊監聽 數據更新與通知 粘性事件 postValue observeForever

LiveData是Jetpack裏一個十分常用的組件,它是一個可以被觀察的數據源。能夠感知 Activity等的生命週期,在onStart或者onResume的時候纔會回調監聽。 這裏舉個簡單的例子,我們在Activity中可以使用Data