原创 WakeLock的介紹與使用
1.什麼是WakeLock WakeLock是一種機制,表示應用需要設備保持運行(stay on)。 WakeLock默認是引用計數,如果WakeLock是引用計數的話,則調用了幾次acquire()方法,就需要調用對應次
原创 JNI開發之JNI實踐
在上一篇文章中介紹了JNI開發的環境搭建,這篇文章將用兩個實例來介紹JNI開發。JNI開發大致可以分爲兩類:一類是Java調用本地代碼方法;另外一類是本地方法訪問Java成員。接下來將分別介紹這兩種情況。 一、Java代碼調用本地方
原创 Android StateMachine實踐
我們在實際應用中經常遇到狀態設計模式,Android 框架中給我們提供了一個經典的狀態模式實現——StateMachine。在StateMachine之前,先來看下狀態設計模式定義和UML類圖。 狀態模式:當一個對象的內在狀態改變時,允
原创 ArrayMap與SparseArray源碼分析
一ArrayMap 簡介 源碼分析 1 構造方法 2 添加元素 3 獲取元素 4 移除元素 二SparseArray 簡介 源碼分析 1 構造方法 2 添加元素 3 獲取元素 4 刪除元素 5 其他方法 三總
原创 Map集合介紹
一、簡介 映射表(也稱關聯數組)的基本思想是它維護的是鍵-值(對)關聯,因此你可以使用鍵來查找值。標準的Java類庫中包含了Map的幾種基本實現,包括:HashMap、TreeMap、LinkedHashMap,WeakHa
原创 JNI開發之環境搭建
在上篇文章中介紹了JNI內存泄露的一些場景,這篇文章將描述JNI開發環境的搭建。JNI開發的環境搭建將從NDK簡介、NDK環境配置之Eclipse、NDK環境配置之Linux、NDK環境配置之Android Studio、NDK之A
原创 JNI開發之JNI簡介
一、JNI簡介 什麼是JNI? JNI(Java Native Interface,Java本地接口),用於銜接Java層與Native(C/C++)層。Java可以通過JNI調用本地的C/C++代碼,本地的C/C++代碼
原创 JNI開發之JNI原理
在上一篇文章中對JNI簡單介紹了,在這篇文章中將對JNI原理進行介紹。本篇文章將以JNI執行環境、JNI數據類型、JNI註冊方式、JNI引用、JNI變量共享以及JNI調用方式來介紹JNI原理。 一、執行環境(Runtime)
原创 JNI開發之JNI常見錯誤
在上一篇文章中對JNI原理進行了介紹,這篇文章將對JNI開發中的一些常見錯誤進行總結一下。 一、常見錯誤原因分析 在JNI開發中,經常會遇到各種各樣的錯誤,這裏總結一下: find Library returned null
原创 SparseArray源碼解析
1.SparseArray簡介 SparseArray的主要作用是將Integers映射到Objects,相當於Map<Integer,Object>。當需要將Integers映射到Objects時,SparseArray比H
原创 JNI開發之JNI內存泄露
在上篇文章中介紹了JNI常見錯誤,這篇文章將描述JNI開發中內存泄露問題。在Java編程中,內存泄漏可以根據泄漏的內存位置劃分爲兩種:一種是JVM中的Java Heap的內存泄漏。另外一種是JVM中的Native memory內存泄
原创 ANR源碼分析之Broadcast Timeout
在上篇文章中,介紹了InputDispatcher Timeout的流程。本篇文章將介紹Broadcast Timeout的流程。 我們知道廣播根據註冊的方式的可以分爲靜態註冊廣播和動態註冊廣播,根據發送方式可以分爲普通廣播、有序廣播、
原创 ANR源碼分析之Service Timeout
在前面的一篇文章中,分析了Broadcast Timeout的流程,接下來繼續分析Service Timeout的流程。Service默認不會運行在子線程中,它也不會運行在一個獨立的進程中,它同樣執行在UI線程中,因此也不能在Servi
原创 ANR源碼分析之ContentProviderClient Timeout
在上篇文章中,分析了Service Timeout的過程。這篇文章將繼續分析ContentProviderClient Timeout的流程。當使用ContentProviderClient執行Provider相關操作時,會設定一
原创 Picasso開源庫源碼分析
一簡介 二源碼分析 1 加載圖片 11 構造Picasso實例對象 12 利用load方法加載圖片 13 into方法將ImageView傳入 14 提交任務 2 取消加載圖片 21 Dispatcher發送取消消息 2