日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 久久亚洲综合网 | 亚洲xxxxxx| 日韩精品视频在线播放 | 无码精品黑人一区二区三区 | 国内精品福利视频 | www国产精品| 日本超碰在线 | 亚洲污视频 | 青草视频免费在线观看 | 欧美久久久久久久久中文字幕 | 78m78成人免费网站 | 精品欧美一区二区三区在线观看 | 怡春院欧美 | 一区二区视频免费看 | 国产人成 | 国产精品一区二区久久毛片 | 日本爽爽爽 | 新婚若妻侵犯中文字幕 | 亚洲天天综合 | 木木影院 | 天堂在线日本 | 91亚洲精品久久久蜜桃借种 | 95香蕉视频 | 国产又粗又黄又爽又硬的视频 | 亚洲综合久久久 | 无码人妻精品一区二区三区在线 | 亚洲色图小说 | 欧美激情图片 | 国产香蕉久久 | 日本黄色免费 | 日本欧美久久久 | 欧美交受高潮1 | 午夜草逼 | 国产高清一 | 欧美精品导航 | 国产在线观看无码免费视频 | 岛国精品在线 | 日韩精品免费一区二区三区 | 熟女自拍一区 | 日韩中出在线 | 国产成人精品亚洲日本在线观看 | 蜜桃精品视频在线 | 欧美综合图片 | 中文字幕无码精品亚洲35 | 成人免费午夜视频 | 操操操爽爽爽 | 校园春色亚洲激情 | 99er视频 | 一区二区三区激情 | 色吧综合网 | 99免费精品 | 99久久婷婷国产综合精品电影 | 在线免费看av的网站 | 丰满人妻一区二区三区免费视频棣 | 在线观看免费视频a | 黄网站色 | 久草剧场 | 噜噜噜久久,亚洲精品国产品 | 亚洲精品乱码久久久久久蜜桃欧美 | 青草99| 久久波多野 | 这里只有精品66 | 四虎国产精品永久免费观看视频 | 亚洲九九九九 | 国产明星换脸xxxx色视频 | 桃色在线视频 | 91精品视频一区二区三区 | 黄网在线观看视频 | 国产精品无人区 | 人人搞人人爱 | 国产区一二 | 亚洲二区精品 | 姑娘第5集在线观看免费 | 在线观看少妇 | 亚洲成人视屏 | 男女在楼梯上高潮做啪啪 | 欧美另类z0z变态 | 超薄肉色丝袜一区二区 | 国产一级特黄毛片 | 最近中文字幕无免费 | 丁香花在线影院观看在线播放 | 污视频在线播放 | 国产成人精品亚洲日本在线观看 | 亚洲精品视频在线看 | 国产情趣视频 | 亚洲av成人无码一二三在线观看 | 成人福利在线播放 | 成人手机在线视频 | 日本a免费 | 91亚色视频在线观看 | 黄色三级三级 | 99黄色片| 国产免费福利视频 | 操欧美女人 | 精品电影一区二区 | 国产大片av | 久久这里有精品 | 欧美精品免费一区二区 | 少妇性l交大片免费观看 |