編輯:Android開發實例
客戶端請求建立Surface時,首先在要與SurfaceFlinger建立一個Session,然後再Session上建立一個Connection通過概念返回Bclient對象。WindowManagerService在添加第一個窗口前會檢查SurfaceSession是否建立,如何沒有建立,將會新建立一個實例來代表與SurfaceFlinger的一個連接。
new SurfaceSession()@windowAddedLocked() @WindowManagerService.java。
SurfaceSession的建立過程大部分是在C++ Native空間中完成的,表現在SurfaceSession的初始化函數:init()本地函數上。從下面的初始化函數可以看到:
Init()<->[email protected]_view_Surface.cpp
new SurfaceComposerClient
SurfaceSession在C++Native空間建立一個SurfaceComposerClient實例。而該實例的建立實現了如下的與SurfaceFlinger通訊基礎:
(1)建立了代理SurfaceFlinger服務的代理服務端
(2)建立了IsurfaceFlingerClient連接,在SurfaceFlinger端建立了對應的Client,並將BClient返回給WindowManagerService。
在WindowManagerService中WindowState類中,我們知道每個主窗口子啊需要是都需要建立一個Surface與之對應。win.createSurfaceLocked()@relayoutWindow
Surface.java
Init()< -- >Surface_init(….,session,pid,dpy,w,h,format)@android_view_Surface.cpp
SurfaceControl surface(client->createSurface
在mClient的連接上:建立ISurface接口:
M_Client->greateSurface(...)@
Bclient ::createSurface(mId...)@SurfaceFlinger.cpp
mFlinger->createSurface(clientid....)
createNormalSurfaceLocked
*createNormalSurfaceLocked:建立一個Layer分配顯示內存
*createPushBuffersSurfaceLocked:建立一個LayBuffer但是不分配顯示內存。
做個網站的安卓客戶端,用戶安裝到自己手機上,如果我出了新版本怎麼辦呢?要有版本更新功能。 本來版本檢測最好可以自動進行。但如果每次開啟程序,都要先檢測一輪,是一種
Android記事本示例剖析之三中講了Activity的生命周期,並
做了個Android項目,需要接入新浪微博,實現時也順帶著研究了下騰訊微博和人
今天來實現以下大眾點評客戶端的橫向listview二級列表,先看一下樣式。 這種橫向的listview二級列表在手機軟件上還不太常見,但是使用過平板的