原创 BitmapFactory.Options的inDensity與drawable目錄的關係

源碼獲取圖片 在BitmapFactory.decodeResource時 options通常傳入null那麼在調用以下方法時 /** * Decode a new Bitmap from an InputStream.

原创 Unsafe類的CAS

在FutureTask中使用到了大量Unsafe類的compareAndSwapObject方法在遇到線程安全問題時,我們通常需要使用鎖來解決問題。而其中分爲悲觀鎖與樂觀鎖,java中的synchronize關鍵字使用的就是悲觀鎖,它完全

原创 ndk r17版本不再支持mips

編譯報錯 AndroidSdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip

原创 源碼分析 ItemTouchHelper手勢的入口 (OnInterceptTouchEvent onLongPress等)

ItemTouchHelper是v7包RecyclerView的ItemDecoration接口的一個實現,其前身是v4包的ViewDragHelper(可在任意ViewGroup中使用)在DrawerLayout、SlidingPane

原创 MessageQueue.java源碼分析

 前一篇文章Looper.java分析中已經提到mq實際上初始化nativeInit的是一個c的實例NativeMessageQueue,並將其指針reinterpret_cast<jlong>(nativeMessageQueue)保存

原创 centOS命令行裝androidSDK

linux中安裝ndk與配置ndk環境變量:1、首先是官網找最新的linux下ndk安裝包https://developer.android.google.cn/ndk/downloads/index.html 複製鏈接 wget下來2、

原创 線程局部存儲TLS

這裏說的不是ssl裏得安全傳輸協議。它的全名是Thread-Local Storage線程局部存儲。又叫TSD:Thread-Specific Data線程特有數據池在C/C++程序中常存在全局變量、函數內定義的靜態變量以及局部變量,對於

原创 Looper.java分析

Looper作爲Android中線程間通訊的核心,起着至關重要的作用。它與Handler,MessageQueue一起封裝了一套完整的通訊機制。在調用Looper時,需要先執行prepare() 接着就可以loop()開始接收消息了。我們

原创 AsyncTask源碼簡析

(源碼來自sdk7.0)構造方法構造方法有3個/** * Creates a new asynchronous task. This constructor must be invoked on the UI thread.

原创 eventfd函數

eventfd是從LINUX 2.6.27版本開始增加的,主要用於進程或者線程間的通信(如通知/等待機制的實現)。實現了線程之間事件通知的方式,也可以用於用戶態和內核通信。eventfd的緩衝區大小是sizeof(uint64_t);向其

原创 基於比較的排序時間下界

一個長度爲n的集合排序的結果有n!個結果。以比較爲基礎的排序方式可以看做二叉樹,每個非葉節點左右決定每次比較大小的走向,那麼顯然所有的排序結果都是在這個二叉樹上的葉子(存在可能一結果多個葉子)。已知葉子節點數爲不少於n!個,那麼時間複雜度

原创 Android源碼中的jni方法追蹤

Android源碼中的jni方法通常不是按照Java_路徑名_方法名定義的,都是動態註冊的,那麼Android的JNI_Onload函數在哪裏,我們又怎麼去查詢對應的函數實現呢?答案就在AndroidRuntime.cpp這裏定義了動態加

原创 AppCompatActivity的魔術——如何做到適配新控件

大家都知道google要求使用app的模板類繼承AppCompatActivity 這是一個繼承FragmentAcvitivy的類,他是怎麼做到讓過時控件去使用酷炫的新特性的呢? 來看源碼 核心變量 private AppCompatD

原创 ItemTouchHelper源碼分析 手勢分析OnTouchEvent

ItemTouchHelper手勢的實現都在匿名內部類mOnItemTouchListener中實現, private final OnItemTouchListener mOnItemTouchListener

原创 Android手勢 怎麼樣纔算長按(GestureDetector源碼)

GestureDetector裏onLongPress方法的回調來自 private void dispatchLongPress() { mHandler.removeMessages(TAP);