android基礎夯實2

desaco發表於2016-01-28
24)不把功能都用H5實現然後把需求都扔給前段的人去做;
》用h5開發出的web app體驗上並不比原生app差太多,但其跨平臺的特性大大減低了開發成本,而且可以快速迭代。

25)ServiceManager、ActivityManager、packageManager 、*****Manager 都弄懂了?
  >在Android系統中用到最多的通訊機制就是Binder,Binder主要由Client、Server、ServiceManager和Binder驅動程式組成。其中Client、Service和ServiceManager執行在使用者空間,而Binder驅動程式執行在核心空間。核心元件就是Binder驅動程式了,而ServiceManager提供輔助管理的功能,無論是Client還是Service進行通訊前首先要和ServiceManager取得聯絡。而ServiceManager是一個守護程式,負責管理Server並向Client提供查詢Server的功能。
  >Service Manager存在的意義
1.Service Manager能集中管理系統內的所有服務,它能被施加許可權控制,並不是任何程式都能註冊服務的。
2.Service Manager支援通過字串名稱來查詢對應的Service。
3.由於各種原因的影響,Server程式可能生死無常。如果有了Service Manager做統一的管理,那麼Client只要向Service Manager做查詢,就能得到Server的最新資訊。
  >Service Manager程式的主要工作如下:
    1.初始化binder,開啟/dev/binder裝置;在記憶體中為binder對映128K位元組空間;
    2.指定SM對應的代理binder的handle為0,當client嘗試與SM通訊時,需要建立一個handle為0的代理binder,這裡的代理binder其實就是第一節中描述的那個代理介面;
3.通知binder driver(BD)使SM成為BD的context manager;
4.維護一個死迴圈,在這個死迴圈中,不停地去讀核心中binder driver,檢視是否有可讀的內容;即是否有對service的操作要求, 如果有,則呼叫svcmgr_handler回撥來處理請求的操作。
5.SM維護了一個svclist列表來儲存service的資訊。

26)Binder 也搞清楚了?
  >Android系統程式間通訊機制Binder的總體架構由Client、Server、ServiceManager和驅動程式Binder四個元件構成.
 >binder通訊是一種client-server的通訊結構,
    1.從表面上來看,是client通過獲得一個server的代理介面,對server進行直接呼叫;
    2.實際上,代理介面中定義的方法與server中定義的方法是一一對應的;
    3.client呼叫某個代理介面中的方法時,代理介面的方法會將client傳遞的引數打包成為Parcel物件;
    4.代理介面將該Parcel傳送給核心中的binder driver.
    5.server會讀取binder driver中的請求資料,如果是傳送給自己的,解包Parcel物件,處理並將結果返回;
    6.整個的呼叫過程是一個同步過程,在server處理的時候,client會block住。

相關文章