原创 Service: onStartCommand 的返回值

public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) { onStart(intent, sta

原创 clearCallingIdentity和restoreCallingIdentity

在IPC時,有些情況需要調用clearCallingIdentity和restoreCallingIdentity,原因在於: 假如有A進程和B進程,A調用B,B需要知道A的UID和PID,用於權限檢測,於是B就保存了A的UID和PID,

原创 權限申請

1.先定義一個常量數組,把Manifest中聲明的權限加進去,如下: /** * 所需的所有權限信息 */ private static final String[] NEEDED_PERMISSIONS = new String[

原创 線程池的execute() 方法的執行機制

execute() 方法的執行機制 工作線程數小於核心線程數時,直接新建核心線程執行任務; 大於核心線程數時,將任務添加進等待隊列; 隊列滿時,創建非核心線程執行任務; 工作線程數大於最大線程數時,拒絕任務

原创 熱修復之代碼修復

熱修復主要有三種方案:1.底層替換 2.類加載 3.Instant Run方案 1.底層替換方案 主要利用反射原理,在反射用到的結構體ArtMethod,替換ArtMethod結構體,使其指向修復好的方法。 利用Native反射替換要修復

原创 圖片緩存

public class ImageLoader { ExecutorService mExecutorService = Executors.newFixedThreadPool(Runtime.getRuntime().a

原创 【轉】Android插件化原理解析——概要

轉載:http://weishu.me/2016/01/28/understand-plugin-framework-proxy-hook/ 隨着業務的發展各大廠商都碰到了Android Native平臺的瓶頸: 從技術上講,業務邏輯的複

原创 解決由單例引起的內存泄漏問題

單例對象的生命週期是根據context變化,如果Context使用的是當前Activity或者Fragment中的上下文,則生命週期較短,因此,當生命週期較長的對象引用了“較短”的上下文,會出現這樣的情況,當Context所屬的Activ

原创 EventBus

  三要素: 1.event 2.subscriber 3.publisher 四種線程模型: 1.POSTING (默認) 表示事件處理函數的線程跟發佈事件的線程在同一個線程 2.MAIN 表示事件處理函數的線程在主線程(UI)線程 3

原创 onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState(Bundle outState)在什麼時機會被調用?  onSaveInstanceState(Bundle outState)會在以下情況被調用:  1、按下HOME鍵時。  2、從recent中

原创 《android源碼設計模式》讀書筆記----單例模式

單例模式應用場景:確保某個類有且只有一個對象,避免產生多個對象消耗過多的資源。例如訪問I/O、數據庫資源等; 單例模式關鍵點: 1.構造函數私有化 2.通過靜態方法或者枚舉返回單例對象 3.確保單例類有且只有一個 4.確保單例類在反序列化

原创 ViewPager Fragment切換刷新數據

在需要刷新的fragment中重寫下面的方法: @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHi

原创 JNI開發流程

1.首先在JAVA中聲名native方法,native方法需要C或C++實現,使用時需要加載動態庫,如: static{ System.loadLibrary("xxx"); } 2.編寫JNI的頭文件,XXX.h,也可以使用弓箭自動生成