原创 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);