新聞中心
Android java application運(yùn)行環(huán)境初始化簡(jiǎn)介:

成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的蕉嶺網(wǎng)站建設(shè)公司,蕉嶺接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行蕉嶺網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
在kernle啟動(dòng)之后, 系統(tǒng)將通過(guò)App_main進(jìn)程來(lái)初始化android Runtime JAVA 運(yùn)行環(huán)境,zygote是android的第一個(gè)進(jìn)程,所有android的應(yīng)用都是通過(guò)zygote fork出來(lái)的子進(jìn)程。與QT不一樣的是系統(tǒng)調(diào)用fork啟動(dòng)新進(jìn)程而不再通過(guò)execv將子進(jìn)程完全替換,這樣做的目的是每一個(gè)子進(jìn)程都保留了JAVA VM所需的啟動(dòng)信息比如JNI信息。
與Navtive 層一樣, JAVA application 層也有一個(gè)system service ,service 中啟動(dòng)了很多的服務(wù)如ActivityManagerService,windowManagerService, powerManagerService等等,每啟動(dòng)一個(gè)新的應(yīng)用或者Service, ActivityManangerService都將為該進(jìn)程創(chuàng)建一個(gè)ApplicationThread客戶端,當(dāng)有其他應(yīng)用需要?jiǎng)?chuàng)建新的 Activity或者Bind Service時(shí),system service 就會(huì)通過(guò)binder IPC 機(jī)制通知到相應(yīng)的JAVA application。一旦JAVA Application在ActivityManangerService中創(chuàng)建了客戶端,則客戶端與客戶端,客戶端與Server的IPC連接都建立 了,在Binder IPC通信中已經(jīng)說(shuō)了,對(duì)于需要IPC通信的兩個(gè)不同進(jìn)程,只要獲得了對(duì)方在Binder Kernel中建立的Binder參考,就可以互相傳遞數(shù)據(jù)了。應(yīng)用由system service進(jìn)程啟動(dòng),具體過(guò)程可以參考下面的示意圖,這里就不貼源碼分析了。
兩個(gè)重要的service:
上面提到system service進(jìn)程起來(lái)的過(guò)程過(guò),啟動(dòng)了很多的系統(tǒng)service,這中間有兩個(gè)service非常重要一個(gè)是ActivitManangerService,另一個(gè)是windowManagerService.
AcvivityManagerService:
主要管理Activity, service的加載,卸載,應(yīng)用的創(chuàng)建等,當(dāng)在一個(gè)應(yīng)用程序中調(diào)用StartActivity時(shí),應(yīng)用就通過(guò)IPC機(jī)制向System Service請(qǐng)求啟動(dòng)新的Activity,System Service首先會(huì)查找,這個(gè)Activity是否已經(jīng)被創(chuàng)建,如果沒(méi)有,查找這個(gè)Activity所在的應(yīng)用程序是否已經(jīng)起來(lái),如果沒(méi)有就先啟動(dòng)應(yīng) 用。然后向此應(yīng)用發(fā)送launchActivity消息創(chuàng)建Activity。
WindowManagerService:
主要管理窗體的加載,事件的分發(fā)。啟動(dòng)每個(gè)Activity系統(tǒng)都會(huì)創(chuàng)建一個(gè)viewRoot用于保存所有的view,通過(guò)viewRoot將窗體加載到 WindowManagerService并創(chuàng)建窗體的客戶端,當(dāng)服務(wù)程序接收到按鍵事件后,就會(huì)查找當(dāng)前窗體是否是焦點(diǎn)控件,如果是的話就會(huì)將窗體事件 通過(guò)客戶端IPC傳遞到相應(yīng)的應(yīng)用程序,如果在焦點(diǎn)View中有注冊(cè)接收KeyEvent的消息則事件就在該view中得到處理。
新聞名稱(chēng):Android應(yīng)用初始化及窗體事件的分發(fā)
網(wǎng)頁(yè)網(wǎng)址:http://www.dlmjj.cn/article/coejicj.html


咨詢(xún)
建站咨詢(xún)
