原创 由兩個bug引發的對Java類加載時機的思考

有一個單例類是這麼寫的: public class BluetoothManager { private static BluetoothManager sInstance; public static Blu

原创 將模塊service化的好處

藍牙的所有操作最好都封裝成一個service,好處是相對獨立,作爲一個service組件,可以指定所運行的進程,所有實現徹底和外部解耦,不管是同進程還是跨進程調用對外接口是不變的。因爲APP中可能拆分成多個進程,這些進程對serv

原创 移動端算法加速總結

做了幾個月的移動端算法性能加速,略有心得,這裏做個小結。 性能加速,即對於給定的輸入,用更短的時間獲得我們想要的輸出。 總的來說有兩個思路: 降低計算量 提高計算速度。 各種優化技術基本上都是圍繞這兩點展開的。 降低計算量

原创 一個讓我很無語的bug

被一個詭異的bug折騰了半天,當找到原因時哭笑不得。先看如下代碼,大家分析一下打出來的會是什麼: public class TestDebug { private static HashMap<String, BleDe

原创 如何攔截Activity的啓動(二)

本文我們將以一個工程爲例,驗證攔截Activity啓動的可行性,我們的目標是將普通的APK當做插件加載起來,不做任何修改,插件內Activity跳轉也沒有任何問題。這個APK自然是沒有安裝的,但是可以安裝後正常獨立運行。 首先新建

原创 關於Handler的攔截

爲什麼要Hook Handler?Android系統中存在大量Handler,我們要改變系統的某些行爲就需要Hook掉一些關鍵節點的Handler,爲此,我們要清楚Handler的工作原理。 先做一個實驗來看看Hook Handl

原创 關於Android MultiDex的問題

這段時間研究了一下Android MultiDex,這個東西乍看起來很簡單,其實涉及到很多東西,本文就來講講這個,想到哪就說到哪。 分包主要是因爲包太大了,低端手機安裝可能會失敗,或者Dex加載的時候會崩潰,所以分成多個包,跟啓動

原创 談動態代理在Android插件中的一些用法

主APP爲插件提供了一系列接口,我們需要考慮以下幾個問題: 一、權限控制,檢查調用者權限 如果接口都封裝到service中,則可以在Manifest文件中對暴露的service增加signature的保護級別 使用Binder的

原创 一件挺有意思的事,關於數據校驗

說個有意思的事,我媽晚上打電話向我求助,說她請了個人幫他收賬,問我有不有什麼辦法能讓她知道哪些賬收回來了,哪些沒有收回來。我一聽就笑了,你要收哪些賬

原创 一個關於Java的裝箱與拆箱的bug

先看如下代碼: public class TestBoxing { public static void main(String[] args) { int result = getProp("hello

原创 關於跨進程的觀察者模式

觀察者模式我們平時用的很多,好像很簡單,其實還是有很多東西可以深挖的。比如觀察者模式在跨線程,跨進程,跨設備時該如何實現呢? 先來看看跨線程,由於是在同一個進程內,所以註冊回調就好了,當觀察對象發生變動時,調用回調通知觀察者即可,

原创 關於Android端相機應用涉及到的技術

目前AI視覺以及短視頻相關的應用都和相機有關,涉及到相機的調用,Surface渲染,視頻錄製等功能,這裏做了一個Demo項目,基本包含了Android相機應用涉及的所有技術。 https://github.com/dingjikerb

原创 Android Camera源碼分析

回顧這半年做的項目基本都跟Camera有關,從手勢識別控制空調,到人臉識別的門禁,都是圍繞相機的數據處理和渲染。這裏相機不限於本地的相機,還包括遠程的RTSP相機,要將數據流拉到本地進行渲染。 這兩天好好讀了一下Camera的源碼,大

原创 Android BufferQueue原理分析

在Android中,BufferQueue是Surface實現本地窗口的關鍵,駐留在SurfaceFlinger進程中進行服務,下面從BufferQueue的結構開始分析, class BufferQueue : public BnG

原创 NEON優化——OpenCV Resize雙線性插值

算法要點 一、基本原理 具體原理可以自行搜索,這裏只大致描述一下,目標圖像上某一個點按比例映射到原始圖像上某一點,不過通常計算得到的原始點座標不是整數,最近鄰的做法是向下取整,而雙線性差值的做法是取與該座標最接近的上下左右四個點來線性