成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有什么特點

這篇文章主要介紹了Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有什么特點,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護、公眾號搭建、小程序制作、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!

Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有兩個特點,一是進程的入口函數(shù)是ActivityThread.main,二是進程天然支持 Binder進程間通信機制;這兩個特點都是在進程的初始化過程中實現(xiàn)的,本文將詳細分析Android應(yīng)用程序進程創(chuàng)建過程中是如何實現(xiàn)這兩個特點的。

Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程的入口函數(shù)是ActivityThread.main比較好理解,即進程創(chuàng)建完成之 后,Android應(yīng)用程序框架層就會在這個進程中將ActivityThread類加載進來,然后執(zhí)行它的main函數(shù),這個main函數(shù)就是進程執(zhí)行 消息循環(huán)的地方了。Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程天然支持Binder進程間通信機制這個特點應(yīng)該怎么樣理解呢?前面我們在學習 Android系統(tǒng)的Binder進程間通信機制時說到,它具有四個組件,分別是驅(qū)動程序、守護進程、Client以及Server,其中Server組 件在初始化時必須進入一個循環(huán)中不斷地與Binder驅(qū)動程序進行到交互,以便獲得Client組件發(fā)送的請求,具體可參考Android系統(tǒng)進程間通信 (IPC)機制Binder中的Server啟動過程源代碼分析一文,但是,當我們在Android應(yīng)用程序中實現(xiàn)Server組件的時候,我們并沒有讓 進程進入一個循環(huán)中去等待Client組件的請求,然而,當Client組件得到這個Server組件的遠程接口時,卻可以順利地和Server組件進行 進程間通信,這就是因為Android應(yīng)用程序進程在創(chuàng)建的時候就已經(jīng)啟動了一個線程池來支持Server組件和Binder驅(qū)動程序之間的交互了,這 樣,極大地方便了在Android應(yīng)用程序中創(chuàng)建Server組件。

在Android應(yīng)用程序框架層中,是由ActivityManagerService組件負責為Android應(yīng)用程序創(chuàng)建新的進程的,它本來也是 運行在一個獨立的進程之中,不過這個進程是在系統(tǒng)啟動的過程中創(chuàng)建的。ActivityManagerService組件一般會在什么情況下會為應(yīng)用程序 創(chuàng)建一個新的進程呢?當系統(tǒng)決定要在一個新的進程中啟動一個Activity或者Service時,它就會創(chuàng)建一個新的進程了,然后在這個新的進程中啟動 這個Activity或者Service,具體可以參考Android系統(tǒng)在新進程中啟動自定義服務(wù)過程(startService)的原理分析、 Android應(yīng)用程序啟動過程源代碼分析和Android應(yīng)用程序在新的進程中啟動新的Activity的方法和過程分析這三篇文章。

ActivityManagerService啟動新的進程是從其成員函數(shù)startProcessLocked開始的,在深入分析這個過程之前,我們先來看一下進程創(chuàng)建過程的序列圖,然后再詳細分析每一個步驟。

Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有什么特點

Step 1. ActivityManagerService.startProcessLocked

這個函數(shù)定義在frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中:

[java] view plaincopypublic final class ActivityManagerService extends ActivityManagerNative implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback { ...... private final void startProcessLocked(ProcessRecord app, String hostingType, String hostingNameStr) { ...... try { int uid = app.info.uid; int[] gids = null; try { gids = mContext.getPackageManager().getPackageGids( app.info.packageName); } catch (PackageManager.NameNotFoundException e) { ...... } ...... int debugFlags = 0; ...... int pid = Process.start("android.app.ActivityThread", mSimpleProcessManagement ? app.processName : null, uid, uid, gids, debugFlags, null); ...... } catch (RuntimeException e) { ...... } } ...... }

它調(diào)用了Process.start函數(shù)開始為應(yīng)用程序創(chuàng)建新的進程,注意,它傳入一個***個參數(shù) 為"android.app.ActivityThread",這就是進程初始化時要加載的Java類了,把這個類加載到進程之后,就會把它里面的靜態(tài)成 員函數(shù)main作為進程的入口點,后面我們會看到。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有什么特點”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

分享文章:Android應(yīng)用程序框架層創(chuàng)建的應(yīng)用程序進程具有什么特點
當前URL:http://jinyejixie.com/article8/iehdip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、ChatGPT、靜態(tài)網(wǎng)站軟件開發(fā)、響應(yīng)式網(wǎng)站App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
康保县| 巩义市| 布拖县| 将乐县| 聂拉木县| 金坛市| 肥城市| 平顶山市| 甘洛县| 长沙县| 厦门市| 衡水市| 鞍山市| 阿图什市| 宜章县| 吉水县| 竹北市| 祁阳县| 即墨市| 岗巴县| 邢台市| 治县。| 霍城县| 诏安县| 三亚市| 边坝县| 北辰区| 奉节县| 沈阳市| 阿鲁科尔沁旗| 慈溪市| 民权县| 莱西市| 西丰县| 嘉鱼县| 浮梁县| 杭锦后旗| 翁源县| 吴桥县| 邯郸县| 旬邑县|