原创 Android Camera2拍照(一)——使用SurfaceView

Camera2 API簡介 Android 從5.0(21)開始,引入了新的Camera API Camera2,原來的android.hardware.Camera被廢棄(下面稱爲Camera1),還有一個android.graphic

原创 Android多媒體框架(1)——MediaCodec.java源代碼分析

概述 MediaCodec勇於訪問底層的編解碼器,是Android底層多媒體支持框架的一部分。它可以操作三種數據:壓縮後的,原始的音頻數據,以及原始的視頻數據。 MediaCodec以異步的方式處理數據,會用到一組輸入和輸出緩衝區

原创 基於kafka和prometheus的無線APM報警系統設計和實現

基於kafka和prometheus的無線APM報警系統設計和實現 移動APP是當下的主流。公司有很多業務線,有大量的APP。爲了能夠實現對這些APP性能的監控,爲無線開發、測試人員提供性能診斷和分析工具,公司自行開發了無線APM

原创 Android多媒體框架(3)—— libstagefright中MediaCodec源碼分析

libstagefright中MediaCodec源碼分析 和前兩篇一樣,我們按照MediaCodec的各個狀態來分析libstagefright中MediaCodec的源代碼。 configure 首先我們看一下configu

原创 XMPP的優點和不足

XMPP的優點和不足 3月份剛換了工作,入職之後新東家讓我負責IM SDK的維護和重構工作。想起8年前曾經也搞過一段時間IM,當時是基於XMPP協議做的二次開發。時間又過了將近十年,時代在發展,技術在進步,如今可以考慮重新研究一下

原创 Android多媒體框架(4)—— AMessage,AHandler和ALooper源碼分析

AMessage,AHandler和ALooper源碼分析 AMessage繼承自RefBase類,它有AHandler和ALooper的成員mHandler和mLooper,並且ALooper還是它的友元。成員變量mWhat是消

原创 Android多媒體框架(6)—— MediaMuxer的jni代碼分析

MediaMuxer的jni代碼分析 jni方法的定義 MediaMuxer jni方法的定義在frameworks/base/media/jni/android_media_MediaMuxer.cpp中。 static con

原创 Android多媒體框架(5)—— MediaMuxer.jara源碼分析

MediaMuxer.jara源碼分析 音視頻通過Codec(編碼器)編碼之後,還需要經過MediaMuxer(混合器)“混合”。混合器在framework的實現就是MediaMuxer類。MediaMuxer中又個內部類Outp

原创 sqlite鎖機制和greenDAQ多線程

鎖 Android和iOS都是採用的sqlite作爲默認數據庫。在有併發業務的場景下,數據庫需要提供鎖機制來保證數據一致。sqlite3提供了五種級別的鎖:未加鎖(UNLOCKED)、共享 (SHARED)、保留 (RESERVE

原创 XMPP概覽

XMPP概覽 3月份剛換了工作,入職之後新東家讓我負責IM SDK的維護和重構工作。想起8年前曾經也搞過一段時間IM,當時是基於XMPP協議做的二次開發。時間又過了將近十年,時代在發展,技術在進步,如今可以考慮重新研究一下xmpp

原创 Proxy——代理模式

意圖 爲其它對象提供一種代理以控制對這個對象的訪問。 適用性 在需要用比較通用和複雜的對象指針代替簡單的指針的時候,使用Proxy模式。下面是一些可以使用Proxy模式常見情況。 1)遠程代理(Remote Proxy):爲一個對象在不同

原创 Cache-Control與retrofit緩存

Cache-Control HTTP中這個字段用於指定所有緩存機制在整個請求/響應鏈中必須服從的指令。緩存指令是單向的,即請求中存在一個指令並不意味着響應中將存在同一個指令。常見的取值有private、no-cache、max-age、m

原创 H5中啓動Android app

H5中判斷應用是否安裝 H5中是無法直接判斷應用是否安裝的,但是可以間接判斷。 第一種方式, if(...){ document.location = ''; setTimeout(function(){    //此處如果執行則表示沒有

原创 flyweight——享元模式

意圖 運用共享技術有效地支持大量細粒度的對象。 適用性 當以下情況都成立時可以使用享元模式: 一個應用程序使用了大量的對象。完全由於使用大量的對象,造成很大的存儲開銷。對象的大多數狀態都可變爲外部狀態。如果刪除對象的外部狀態,那麼可以用相

原创 HTTP頭中的Content-Transfer-Encoding

最近在用retrofit傳輸文件的時候,發現設置MultiPart之後,傳輸的內容會自動添加Content-Transfer-Encoding:binary的頭域。於是專門研究了一下這個域。 從它的命名就可以看出,這個head域是用來描述