原创 Android後臺殺死系列之四:Binder訃告原理

Binder是一個類似於C/S架構的通信框架,有時候客戶端可能想知道服務端的狀態,比如服務端如果掛了,客戶端希望能及時的被通知到,而不是等到再起請求服務端的時候才知道,這種場景其實在互爲C/S的時候最常用,比如AMS與APP,當A

原创 SharePreference原理及跨進程數據共享的問題

SharedPreferences是Android提供的數據持久化的一種手段,適合單進程、小批量的數據存儲與訪問。爲什麼這麼說呢?因爲SharedPreferences的實現是基於單個xml文件實現的,並且,所有持久化數據都是一次

原创 Android VSYNC與圖形系統中的撕裂、雙緩衝、三緩衝淺析

先接觸兩個圖形概念: 幀率(Frame Rate,單位FPS)–GPU顯卡生成幀的速率,也可以認爲是數據處理的速度), 屏幕刷新頻率 (Refresh Rate單位赫茲/HZ):是指硬件設備刷新屏幕的頻率。屏幕刷新率一般是固定的,

原创 Android窗口管理分析(3):窗口分組及Z-order的確定

在Android系統中,窗口是有分組概念的,例如,Activity中彈出的所有PopupWindow會隨着Activity的隱藏而隱藏,可以說這些都附屬於Actvity的子窗口分組,對於Dialog也同樣如此,只不過Dialog與

原创 Android Activity的啓動模式分析

面試的時候,面試官經常同你隨便侃侃Activity的啓動模式,但Activity啓動牽扯的知識點其實很多,並非能單單用四個啓動模式就能概括的,默認的啓動模式的表現會隨着Intent Flag的設置而改變,因此侃Activity啓動

原创 Android窗口管理分析(4):Android View繪製內存的分配、傳遞、使用

前文Android匿名共享內存(Ashmem)原理分析了匿名共享內存,它最主要的作用就是View視圖繪製,Android視圖是按照一幀一幀顯示到屏幕的,而每一幀都會佔用一定的存儲空間,通過Ashmem機制APP與SurfaceFl

原创 Android 後臺限制啓動Service、Activity與Notification、PendingIntent淺析

Android O之後,很多後臺啓動的行爲都開始受限,比如O的時候,不能後臺啓動Service,而在Android10之後,連Activity也加到了後臺限制中。在Android O 後臺startService限制簡析中,層分析

原创 從Toast顯示原理初窺Android窗口管理

Android窗口管理系統是非常大的一塊,涉及AMS、InputManagerService、輸入法管理等,這麼複雜的一個系統,如果直接扎進入分析看源碼可能會比較混亂,所以,本文以Toast顯示原理作爲切入點,希望能簡單點初窺一下

原创 Android ContentProvider支持跨進程數據共享與"互斥、同步"雜談

在開發中,假如,A、B進程有部分信息需要同步,這個時候怎麼處理呢?設想這麼一個場景,有個業務複雜的Activity非常佔用內存,並引發OOM,所以,想要把這個Activity放到單獨進程,以保證OOM時主進程不崩潰。但是,兩個整個

原创 Android內存分配/回收的一個問題-爲什麼內存使用很少的時候也GC

Android應用建立在Java虛擬機之上的,Google爲了保證同時多個APP運行並及時喚醒,就爲每個虛擬機設置了最大可使用內存,通過adb命令可以查看相應的幾個參數, * [dalvik.vm.heapgrowthlimit]

原创 Android 混合開發之JsBridge

電商或者內容類APP中,H5通常都會佔據一席之地,Native跟H5通信會必不可少,比如某些場景H5通知native去分享,native通知H5局部刷新等,Android本身也提供這樣的接口,比如addJavascriptInte

原创 瞭解Android觸摸事件原理(InputManagerService)

從手指接觸屏幕到MotionEvent被傳送到Activity或者View,中間究竟經歷了什麼?Android中觸摸事件到底是怎麼來的呢?源頭是哪呢?本文就直觀的描述一個整個流程,不求甚解,只求瞭解。 Android觸摸事件模型

原创 Android VSYNC (Choreographer)與UI刷新原理分析.md

從UI控件內容更改到被重新繪製到屏幕上,這中間到底經歷了什麼?另外,連續兩次setTextView到底會觸發幾次UI重繪呢?爲什麼Android APP的幀率最高是60FPS呢,這就是本文要討論的內容。 以電影爲例,動畫至少要達到

原创 Android權限檢查API checkSelfPermission失效問題

Android6.0之後,權限分爲install時的權限跟運行時權限,如果我們的targetSdkVersion>=23,install權限同runtime權限是分開的,app也要針對6.0已經做適配,沒什麼大問題,無論運行在舊版

原创 Android中mmap原理及應用簡析

mmap是Linux中常用的系統調用API,用途廣泛,Android中也有不少地方用到,比如匿名共享內存,Binder機制等。本文簡單記錄下Android中mmap調用流程及原理。mmap函數原型如下: void *mmap(void