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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

android jni fork()子进程不运行_安卓系统最重要的进程之一:system_server详细分析...

發(fā)布時(shí)間:2025/4/5 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android jni fork()子进程不运行_安卓系统最重要的进程之一:system_server详细分析... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 概述

SystemServer是android系統(tǒng)的系統(tǒng)服務(wù)進(jìn)程。屬于系統(tǒng)級(jí)別,其它服務(wù)進(jìn)程都是應(yīng)用級(jí)別。它也是android系統(tǒng)的唯一一個(gè)系統(tǒng)服務(wù)進(jìn)程。

SystemServer進(jìn)程的名字是system_server,由父進(jìn)程zygote fork()而來??梢酝ㄟ^ps查看system_server的PPID(Parent Process ID)剛好是zygote進(jìn)程的PID(Process ID)。

SystemServer進(jìn)程里面主要有三塊內(nèi)容:android_servers、framework資源、各種系統(tǒng)服務(wù)。

1)android_servers是指動(dòng)態(tài)鏈接庫(kù)libandroid_servers.so。android_servers是JNI層。源碼位于frameworks/base/services/core/jni/路徑下。是服務(wù)的JAVA端和C端銜接的地方。

2)framework資源,創(chuàng)建上下文的時(shí)候,會(huì)加載framework-res.apk。framework-res.apk是一個(gè)資源型APK,只有資源,沒有邏輯。源碼位于frameworks/base/core/res/。最后生成到system/framework/framework-res.apk。

3)各種系統(tǒng)服務(wù),android的系統(tǒng)服務(wù)非常多,有上百個(gè)。其中關(guān)鍵服務(wù)ActivityManagerService、PowerManagerService、LightsService、DisplayManagerService、PackageManagerService、WindowManagerService、InputManagerService、NetworkManagerService等。源碼位于frameworks/base/services/core/java/路徑下。

2 system_server前置啟動(dòng)過程

system_server進(jìn)程是在zygote進(jìn)程啟動(dòng)的時(shí)候,由zygote進(jìn)程fork而來。

frameworks/base/cmds/app_process/app_main.cpp

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

至此,粗略的回顧了一下,需要詳細(xì)信息的請(qǐng)參見前面的文章。下面進(jìn)入system_server進(jìn)程的實(shí)際邏輯。

3 system_server啟動(dòng)過程

主流程代碼位于下面的路徑。直接去看入口函數(shù)main()。

frameworks/base/services/java/com/android/server/Systemserver.java

創(chuàng)建匿名對(duì)象,然后調(diào)用run()方法。下面開始分析run()方法,run()方法就是system_server進(jìn)程的主流程。

第一步檢查并設(shè)置系統(tǒng)時(shí)間。因?yàn)槿绻到y(tǒng)時(shí)間在1970年以前,很多Java API會(huì)崩潰。所以這里首先檢查系統(tǒng)時(shí)間,如果小于1970年,就設(shè)置系統(tǒng)時(shí)間為1970年。正常情況下,后面cell tower或NTP會(huì)糾正系統(tǒng)時(shí)間。

這里是系統(tǒng)語言和地區(qū)的檢查設(shè)置。

從虛擬機(jī)運(yùn)行時(shí)取得虛擬機(jī)庫(kù),設(shè)置屬性persist.sys.dalvik.vm.lib.2。

內(nèi)存設(shè)置。system_server作為核心進(jìn)程,并且需要持續(xù)在后臺(tái)運(yùn)行。清除內(nèi)存限制,提高效率。

檢查fingerprint屬性并設(shè)置。如果沒有預(yù)先設(shè)置fingerprint屬性,這里會(huì)根據(jù)下面的屬性生成一個(gè)fingerprint的值,然后設(shè)置。

提高binder calls的優(yōu)先級(jí),是其為前臺(tái)優(yōu)先級(jí)。設(shè)置最大binder線程數(shù)為31個(gè)。

設(shè)置本線程優(yōu)先級(jí)為前臺(tái)優(yōu)先級(jí),不允許設(shè)置優(yōu)先級(jí)為后臺(tái)。同時(shí),創(chuàng)建主線程的Looper。

加載動(dòng)態(tài)鏈接庫(kù)libandroid_servers.so。這個(gè)庫(kù)是系統(tǒng)服務(wù)和native進(jìn)行交互的jni層生成的。

創(chuàng)建上下文context,并設(shè)置system_server進(jìn)程的默認(rèn)主題。

創(chuàng)建systemservicemanager,顧名思義,它是用來管理系統(tǒng)服務(wù)systemservice的。并把它添加到LocalService。在第四節(jié)詳細(xì)分析。

啟動(dòng)系統(tǒng)服務(wù)。在第五節(jié)詳細(xì)分析。

進(jìn)入消息循環(huán),Looper的無限循環(huán)。

消息循環(huán)異常退出的時(shí)候,會(huì)拋出這個(gè)異常,意味著system_server進(jìn)程死掉了。

4 SystemServiceManager

管理系統(tǒng)服務(wù)的創(chuàng)建、啟動(dòng)和生命周期事件。

這個(gè)類比較小,整個(gè)文件就250行。關(guān)鍵成員變量是mServices,是SystemService的列表,每個(gè)注冊(cè)的系統(tǒng)服務(wù),都會(huì)在這個(gè)列表里面存在instance。

SystemServiceManager是一個(gè)管理類Manager。使用列表ArrayList數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)系統(tǒng)服務(wù)的實(shí)例。

系統(tǒng)服務(wù)都會(huì)繼承基類SystemService,抽象類SystemService里面定義了系統(tǒng)服務(wù)的框架方法。

系統(tǒng)服務(wù)管理者SystemServiceManager會(huì)在系統(tǒng)啟動(dòng)/運(yùn)行的不同階段,調(diào)用系統(tǒng)服務(wù)們的不同方法。

5 各種系統(tǒng)服務(wù)

運(yùn)行在system_server進(jìn)程里面的系統(tǒng)服務(wù)分為三類:關(guān)鍵服務(wù)、核心服務(wù)、其它服務(wù)。

關(guān)鍵服務(wù):

已上都是binder service,還有一個(gè)local service 叫l(wèi)ight service。

核心服務(wù):

其他服務(wù):

這里的注解給人以遐想:開始處理一大堆尚未重構(gòu)和整理的東西。

這一階段啟動(dòng)的服務(wù)非常多:振動(dòng)器服務(wù)、掛載服務(wù)、網(wǎng)絡(luò)管理服務(wù)、網(wǎng)絡(luò)狀態(tài)服務(wù)、連接服務(wù)、網(wǎng)絡(luò)評(píng)分服務(wù)、nsd服務(wù)、窗口管理服務(wù)、串號(hào)服務(wù)、網(wǎng)絡(luò)時(shí)間更新服務(wù)、common time管理服務(wù)、輸入管理服務(wù)、TelephonyRegistry、ConsumerIsService、MmsServiceBroker、硬件屬性管理服務(wù)、SchedulingPolicyService、CameraService、賬戶管理服務(wù)、ContentService、鬧鐘服務(wù)、VR管理服務(wù)等等上百個(gè)服務(wù)。startOtherService()方法有1000多行。

總結(jié)

以上是生活随笔為你收集整理的android jni fork()子进程不运行_安卓系统最重要的进程之一:system_server详细分析...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。