Android 應用初始化及表單事件的分發

來源:互聯網
上載者:User

 Android 應用


初始化及表單事件(按鍵)的分發
            ---AlbertChen
Android java


application運行環境初始化簡介:
在kernle啟動之後, 系統


將通過App_main進程來初始化android Runtime JAVA
運行環境,zygote是android的第一個進程,所有android的應用都是通過zygote
fork出來的子進程。與QT不一樣的是系統調用fork啟動新進程而不再通過execv將子進程完全替換,這樣做的目的是每一個子進程都保留了JAVA
VM所需的啟動資訊比如JNI 資訊。
與Navtive 層一樣, JAVA application 層也有一個system service ,service
中啟動了很多的服務如ActivityManagerService,windowManagerService,
powerManagerService等等,每啟動一個新的應用或者Service,
ActivityManangerService都將為該進程建立一個ApplicationThread用戶端,當有其他應用需要建立新的
Activity或者Bind Service時,system service 就會通過binder IPC 機制通知到相應的JAVA
application。一旦JAVA
Application在ActivityManangerService中建立了用戶端,則用戶端與用戶端,用戶端與Server的IPC串連都建立
了,在Binder IPC通訊中已經說了,對於需要IPC通訊的兩個不同進程,只要獲得了對方在Binder
Kernel中建立的Binder參考,就可以互相傳遞資料


了。應用由system
service進程啟動,具體過程可以參考下面的,這裡就不貼源碼分析了。
兩個重要的service:
上面提到system service進程起來的過程過,啟動了很多的系統service,這中間有兩個service非常重要一個是ActivitManangerService,另一個是windowManagerService.
AcvivityManagerService:
主要管理Activity,
service的載入,卸載,應用的建立等,當在一個應用程式中調用StartActivity時,應用就通過IPC機制向System
Service請求啟動新的Activity,System
Service首先會尋找,這個Activity是否已經被建立,如果沒有,尋找這個Activity所在的應用程式是否已經起來,如果沒有就先啟動應
用。然後向此應用發送launchActivity訊息建立Activity。
WindowManagerService:
    
主要管理


表單的載入,事件的分發。啟動每個Activity系統都會建立一個viewRoot用於儲存所有的view,通過viewRoot將表單載入到
WindowManagerService並建立表單的用戶端,當服務程式接收到按鍵事件後,就會尋找當前表單是否是焦點控制項,如果是的話就會將表單事件
通過用戶端IPC傳遞到相應的應用程式,如果在焦點View中有註冊接收KeyEvent的訊息則事件就在該view中得到處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.