日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android系统的开机画面显示过程分析(13)

發布時間:2025/7/14 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android系统的开机画面显示过程分析(13) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ??WindowManagerService類的成員函數performEnableScreen的實現如下所示:
  • public?class?WindowManagerService?extends?IWindowManager.Stub???
  • ????????implements?Watchdog.Monitor?{???
  • ????......???
  • ???
  • ????public?void?performEnableScreen()?{???
  • ????????synchronized(mWindowMap)?{???
  • ????????????if?(mDisplayEnabled)?{???
  • ????????????????return;???
  • ????????????}???
  • ????????????if?(!mSystemBooted)?{???
  • ????????????????return;???
  • ????????????}???
  • ???
  • ????????????......???
  • ???
  • ????????????mDisplayEnabled?=?true;???
  • ????????????......???
  • ???
  • ????????????try?{???
  • ????????????????IBinder?surfaceFlinger?=?ServiceManager.getService("SurfaceFlinger");???
  • ????????????????if?(surfaceFlinger?!=?null)?{???
  • ????????????????????//Slog.i(TAG,?"*******?TELLING?SURFACE?FLINGER?WE?ARE?BOOTED!");???
  • ????????????????????Parcel?data?=?Parcel.obtain();???
  • ????????????????????data.writeInterfaceToken("android.ui.ISurfaceComposer");???
  • ????????????????????surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION,???
  • ????????????????????????????????????????????data,?null,?0);???
  • ????????????????????data.recycle();???
  • ????????????????}???
  • ????????????}?catch?(RemoteException?ex)?{???
  • ????????????????Slog.e(TAG,?"Boot?completed:?SurfaceFlinger?is?dead!");???
  • ????????????}???
  • ????????}???
  • ???
  • ????????......???
  • ????}???
  • ???
  • ????......???
  • }???

  • ?? ? ? ?WindowManagerService類的另外一個成員變量mDisplayEnabled用來描述WindowManagerService是否已經初始化過系統的屏幕了,只有當它的值等于false,并且系統已經完成啟動,即WindowManagerService類的成員變量mSystemBooted等于true的情況下,WindowManagerService類的成員函數performEnableScreen才通知SurfaceFlinger服務停止顯示開機動畫。
    ?? ? ? ?注意,WindowManagerService類的成員函數performEnableScreen是通過一個類型為IBinder.FIRST_CALL_TRANSACTION的進程間通信請求來通知SurfaceFlinger服務停止顯示開機動畫的。 ? ? ? ? 在SurfaceFlinger服務,類型為IBinder.FIRST_CALL_TRANSACTION的進程間通信請求被定義為停止顯示開機動畫的請求,如下所示:
  • class?BnSurfaceComposer?:?public?BnInterface<ISurfaceComposer>??
  • {??
  • public:??
  • ????enum?{??
  • ????????//?Note:?BOOT_FINISHED?must?remain?this?value,?it?is?called?from??
  • ????????//?Java?by?ActivityManagerService.??
  • ????????BOOT_FINISHED?=?IBinder::FIRST_CALL_TRANSACTION,??
  • ????????......??
  • ????};??
  • ??
  • ????virtual?status_t????onTransact(?uint32_t?code,??
  • ????????????????????????????????????const?Parcel&?data,??
  • ????????????????????????????????????Parcel*?reply,??
  • ????????????????????????????????????uint32_t?flags?=?0);??
  • };??
  • ?? ? ? ?BnSurfaceComposer類定義在文件frameworks/base/include/surfaceflinger/ISurfaceComposer.h中,它是SurfaceFlinger服務所要繼承的Binder本地對象類,其中。當SurfaceFlinger服務接收到類型為IBinder::FIRST_CALL_TRANSACTION,即類型為BOOT_FINISHED的進程間通信請求時,它就會將該請求交給它的成員函數bootFinished來處理。 ? ? ? ? SurfaceFlinger服務的成員函數bootFinished實現在文件frameworks/base/services/surfaceflinger/SurfaceFlinger.cpp中,如下所示:
  • void?SurfaceFlinger::bootFinished()??
  • {??
  • ????const?nsecs_t?now?=?systemTime();??
  • ????const?nsecs_t?duration?=?now?-?mBootTime;??
  • ????LOGI("Boot?is?finished?(%ld?ms)",?long(ns2ms(duration))?);??
  • ????mBootFinished?=?true;??
  • ????property_set("ctl.stop",?"bootanim");??
  • }??
  • ?? ? ? 這個函數主要就是將系統屬性“ctl.stop”的值設置為“bootanim”。前面提到,每當有一個系統屬性發生變化時,init進程就會被喚醒,并且調用運行在它里面的函數handle_property_set_fd來處理這個系統屬性變化事件。在我們這個場景中,由于被改變的系統屬性的名稱是以"ctl."開頭的,即被改變的系統屬性是一個控制類型的屬性,因此,接下來函數handle_property_set_fd又會調用另外一個函數handle_control_message來處理該系統屬性變化事件。 ? ? ? ?函數handle_control_message實現在文件system/core/init/init.c中,如下所示:
  • void?handle_control_message(const?char?*msg,?const?char?*arg)??
  • {??
  • ????if?(!strcmp(msg,"start"))?{??
  • ????????msg_start(arg);??
  • ????}?else?if?(!strcmp(msg,"stop"))?{??
  • ????????msg_stop(arg);??
  • ????}?else?{??
  • ????????ERROR("unknown?control?msg?'%s'\n",?msg);??
  • ????}??
  • }??
  • ?? ? ? 從前面的調用過程可以知道,參數msg和arg的值分別等于"stop"和“bootanim”,這表示要停止執行名稱為“bootanim”的服務,這是通過調用函數msg_stop來實現的。 ?? ? ? ? ?函數msg_stop也是實現在文件system/core/init/init.c中,如下所示:
  • static?void?msg_stop(const?char?*name)??
  • {??
  • ????struct?service?*svc?=?service_find_by_name(name);??
  • ??
  • ????if?(svc)?{??
  • ????????service_stop(svc);??
  • ????}?else?{??
  • ????????ERROR("no?such?service?'%s'\n",?name);??
  • ????}??
  • }??
  • ?? ? ? 這個函數首先調用函數service_find_by_name來找到名稱等于name,即“bootanim”的服務,然后再調用函數service_stop來停止這個服務。 ?? ? ? 前面提到,名稱為“bootanim”的服務對應的應用程序即為/system/bin/bootanimation。因此,停止名稱為“bootanim”的服務即為停止執行應用程序/system/bin/bootanimation,而當應用程序/system/bin/bootanimation停止執行的時候,開機動畫就會停止顯示了。 ?? ? ? 至此,Android系統的三個開機畫面的顯示過程就分析完成了。通過這個三個開機畫面的顯示過程分析,我們學習到: ?? ? ? 1. 在內核層,系統屏幕是使用一個稱為幀緩沖區的硬件設備來描述的,而用戶空間的應用程序可以通過設備文件/dev/fb0或者/dev/graphics/fb0來操作這個硬件設備。實際上,幀緩沖區本身并不是一個真正的硬件,它只不過是對顯卡的一個抽象表示,不過,我們通過訪幀緩沖區就可以間接地操作顯卡內存以及顯卡中的其它寄存器。 ?? ? ? 2. OpenGL是通過EGL接口來渲染屏幕,而EGL接口是通過ANativeWindow類來間接地渲染屏幕的。我們可以將ANativeWindow類理解成一個Android系統的本地窗口類,即相當于是Windows系統中的窗口句柄概念,它最終是通過文件/dev/fb0或者/dev/graphics/fb0來渲染屏幕的。 ?? ? ? 3. init進程在啟動的過程中,會將另外一個ueventd進程也啟動起來。ueventd進程對應的可執行文件與init進程對應的可執行文件均為/init,不過ueventd進程主要負責處理內核發出的uevent事件,即負責管理系統中的設備文件。 ?? ? ? 4. 每當我們設置一個系統屬性的時候,init進程都會接收到一個系統屬性變化事件。當發生變化的系統屬性的名稱等于“ctl.start”或者“ctl.stop”,那么實際上是向init進程發出一個啟動或者停止服務的命令。 ?? ? ? 前面第1點和第2點的知識是與Android系統的UI實現相關的,而后面第3點和第4點是兩個額外獲得的知識點。 ? ? ? ?本文的目的并不是單純為了介紹Android系統的開機畫面,而是希望能夠以Android系統的開機畫面來作為切入點來分析Android系統的UI實現。在后面的文章中,我們就會根據本文所涉及到的知識點,來展開分析Android系統的UI實現,敬請關注。

    總結

    以上是生活随笔為你收集整理的Android系统的开机画面显示过程分析(13)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本午夜激情视频 | 乱淫的女高中暑假调教h | 叶爱在线 | 色窝窝无码一区二区三区成人网站 | 亚洲黄片一区二区三区 | 美女黄站 | 女同视频网站 | 欧美在线| 91精品久久久久久久久久 | 亚洲精品在线视频观看 | 日本高清xxxx | 国产中文字幕在线播放 | 午夜一二三区 | 8x8ⅹ8成人免费视频观看 | 国产美女精品视频 | 可以免费看的av网站 | av永久免费网站 | 日韩人妻一区二区三区蜜桃视频 | 亚洲精品视频中文字幕 | 久久人人爽爽人人爽人人片av | 成人深夜视频 | 一区二区在线不卡 | 粉嫩久久99精品久久久久久夜 | 蜜桃成人无码区免费视频网站 | 中文字幕电影一区二区 | 国产亚洲欧美在线视频 | 黄色污小说 | 五月婷婷一区二区 | 偷偷色噜狠狠狠狠的777米奇 | 日韩精品一区二区三区不卡在线 | 午夜激情啪啪 | 青草精品 | 欧美激情网站 | 台湾男男gay做爽爽的视频 | 国产成年无码久久久久毛片 | 婷婷五综合| 四虎精品永久在线 | 中文字幕精品一区二 | 日本韩国欧美一区二区 | 亚洲九色 | 四虎免费观看 | 麻豆传媒网站入口 | 欧美视频91 | 日韩中文字幕网址 | 精品欧美日韩 | 欧美日韩中文字幕视频 | 美腿丝袜一区二区三区 | xxxxwww国产| 无码一区二区三区免费视频 | 俺去俺来也在线www色官网 | 久久九九热 | 99精品免费观看 | 岛国av免费看 | 伦理久久| 欧美激情亚洲 | 午夜一级免费 | 毛片资源 | 久久久999国产精品 天堂av中文在线 | 日韩avav | 奇米婷婷 | 一级免费在线观看 | 美女一区 | 狠狠激情 | 亚洲av综合一区二区 | 日本天天操 | 国产中文字幕第一页 | 少妇精品高潮欲妇又嫩中文字幕 | 快播久久 | 久久久久久久久久久久 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 不卡中文字幕在线观看 | 草逼国产| 中国女人毛片 | 久久久久久国产视频 | 黑人高潮一区二区三区在线看 | 久久久久人妻一区精品 | 成年人在线观看av | 国产视频二区三区 | 青草伊人久久 | 欧美日韩电影一区 | 成人亚洲 | 中国女人性猛交 | 综合在线视频 | 免费成人av在线 | 欧美经典一区二区 | 国产色无码精品视频 | 中文字幕日韩一区二区三区不卡 | 99色精品 | 色香蕉视频 | 国内精品在线播放 | 五月婷婷操 | 东方成人av在线 | 性欧美又大又长又硬 | 粉嫩av四季av绯色av | 久久av在线播放 | 国产日韩在线观看视频 | 欧美婷婷精品激情 | 日本黄色片免费看 | 红桃视频隐藏入口 |