Binder系列第一篇:《從getSystemService()開始,開擼Binder通信機制》http://www.jianshu.com/p/1050... Binder系列第二篇:《能用【白話文】來分析Binder通信機制?》http://www.jianshu…
性能優化
終於要開始講解 Activity 的啓動流程了,Activity 的啓動流程相對複雜一下,涉及到了 Activity 中的生命週期方法,涉及到了 Android 體系的 CS 模式,涉及到了 Android 中進程通信 Binder 機制等等
數據結構
Binder系列第一篇:《從getSystemService()開始,開擼Binder通信機制》http://www.jianshu.com/p/1050... Binder系列第二篇:《能用【白話文】來分析Binder通信機制?》http://www.jianshu…
框架
Android系統當中的Binder消息傳遞無處不在,從運行一個新應用到發送一個常見的TIME PICK廣播,再到註冊一個ContentObserver去監聽短信數據的變化,這些功能都須要使用到Binder通訊。正如」凡人必有一死」,system_server進程雖然只要手機保持開機狀態就會存在,可是普通應用不管優先級多麼高,當系統內存匱乏、用戶手動殺死應用進程又或者是應用出現不能解決的BUG直接Force Close了。這時,做爲進程通訊服務端的應用既然死亡了,那麼對應的客戶端相應的服務端以前保存下來的數據就沒有必要保存了。不然的話,應用生老病死之間,若是手機一直不關機,system_server一直在存活期間也不清除死亡進程的遺留信息,那麼這樣的手機系統使用起來會形成內存泄露,系統資源會慢慢被耗盡直至用戶能察覺到的系統卡頓出現。
socket
按計劃原本從這章開始寫四大組件的啓動過程的,可是看看源碼結構發現爲了說的更明白仍是先寫一點系統framework層啓動的內容,幫助理解四大組件的啓動以及管理過程。咱們知道四大組件管理是經過一些服務以及線程實現的,因此先把一些基本概念弄清楚比較好,好比AMS(ActivityMa…
函數
Binder 是 Android 系統進程間通訊(IPC)方式之一。Linux 已經擁有管道,system V IPC,socket 等 IPC 手段,卻還要倚賴 Binder 來實現進程間通訊,說明 Binder 具備無可比擬的優點。深刻了解 Binder 並 將之與傳統 IPC 作對比有助於咱們深刻領會進程間通訊的實現和性能優化。本文將對 Binder 的設計細節作一 個全面的闡述,首先經過介紹 Binder 通訊模型和 Binder 通訊協議瞭解 Binder 的設計需求;而後分別闡 述 Binder 在系統不一樣部分的表述方式和起的做用;最後還會解釋 Binder 在數據接收端的設計考慮,包括 線程池管理,內存映射和等待隊列管理等。經過本文對 Binder 的詳細介紹以及與其它 IPC 通訊方式的對比, 讀者將對 Binder 的優點和使用 Binder 做爲 Android 主要 IPC 方式的緣由有深刻了解。
源碼分析
本篇文章主要討論窗口座標系統、Z序肯定,Choreographer、WindowToken、WindowState、WindowManagerService中的關鍵成員等知識。
性能
因爲四大組件的啓動都涉及到進程的啓動,所以咱們這章先講一下進程啓動流程,而後再講四大組件的啓動流程。 基礎知識 Android應用程序框架層建立的應用程序進程具備兩個特色,一是進程的入口函數是ActivityThread.main,二是進程自然支持Binder進程間通訊機制;這…
學習
深刻講解 Android 的 Binder 機制
優化
分析這個過程不是單純爲跟一遍函數調用的流程,而是更好的理解日常用到的一些方法、對象的初始化時間,對象建立的個數,方法的前後順序,以及每一個類,方法背後的做用和目的。
線程
相關文章 Android系統啓動流程系列 Android應用進程系列 Android深刻四大組件系列 Android深刻解析AMS系列 前言 關於AMS,原計劃是隻寫一篇文章來介紹,可是AMS功能繁多,一篇文章的篇幅遠遠不夠。這一篇咱們接着來學習與AMS相關的ActivityTa…
此前我用多篇文章介紹了WindowManager,這個系列咱們來介紹WindowManager的管理者WMS,首先咱們先來學習WMS是如何產生的。本文源碼基於Android 8.0,與Android 7.1.2相比有一個比較直觀的變化就是Java FrameWork採用了Lam…
直觀地探述 Window、Activity、View 之間的關係
Android Binder 機制是安卓應用運行的基礎,一個應用的運行須要沒法避免地和系統提供的 Binder 作交互。Android 系統以服務(Service)的方式暴露出不少 Binder 對象,準確的說咱們拿到的是 Binder 代理對象(BinderProxy),真正的 Binder 對象運行於安卓系統進程中(system_process)。咱們的應用以誇進程的方式調用系統提供的各類服務,一般以 Context.getSystemService() 的方式獲取系統服務,常見的有 ActivityManager, AlarmManager, InputMethodManager, ConnectivityManager, LayoutInflater 等等,其中有一部分是普通對象,大部分是對系統 Binder 對象的封裝。那應用又是如何拿到系統的 Binder 對象的呢?若是咱們要拿到其餘應用進程的 Binder 對象通常會使用 ServiceConnection 鏈接其餘進程的 Service 拿到 IBinder。然而系統的 IBinder 是用 ServiceManager 暴露給應用進程的。下面以獲取 InputMethodManager 爲例分析應用是如何獲取系統 IBinder 對象的。
scrollTo和scrollBy只是移動本身的內容. 也就是若是ViewGroup設置scrollTo或者scrollBy的話,只有它的子View會有位移效果.若是是TextView設置scrollTo或者scrollBy的話只會讓它內部的文字發生位移. scrollBy仍是…
閱讀Android源碼的好處有不少,能夠加深咱們對系統的瞭解,能夠參考牛人優雅的代碼實現,能夠從根本上找出一些bug的緣由...咱們應該慶幸Android是開源的,全部的功能均可以看到實現,全部的bug都能追蹤溯源。 我想你們或多或少據說過Android源碼開源項目,即AOSP…
窗口管理能夠說是Android系統中最複雜的一部分,主要是它涉及的模塊比較多,雖說是窗口管理,但除了WindowManagerService還包括SurfaceFlinger服務、Linux的共享內存及tmpfs文件系統、Binder通訊、InputManagerService…
以前分析說過,WindowManagerService只負責窗口管理,並不負責View的繪製跟圖層混合,本文就來分析WMS究竟是怎麼管理窗口的。初接觸Android時感受:Activity彷佛就是Google封裝好的窗口,APP只要合理的啓動新的Activity就打開了新窗口,這…
從問題出發,每每能更明確的找到所求。本文將帶着一個個的問題,結合源碼,逐步解析Activity、Window、View的三者關係。
ActivityManagerService 在 Android 系統中扮演着極其重要的角色,主要的做用就是經過進程間通訊的方式來調度 Activity 的生命週期,本文對於這部分有着較爲詳細的描述,但願這篇文章可以幫你瞭解一些 framework 層的知識。