編輯:關於Android編程
我們先來看一張圖,它清晰的說明了整個Android系統的啟動流程,參考Android內核開發:圖解Android系統的啟動過程。
第一階段:Android設備上電後,首先會從處理器片上ROM的啟動引導代碼開始執行,片上ROM會尋找Bootloader代碼,並加載到內存。(這一步由“芯片廠商”負責設計和實現)
第二階段:Bootloader開始執行,首先負責完成硬件的初始化,然後找到Linux內核代碼,並加載到內存。(這一步由“設備廠商”負責設計和實現)
第三階段:Linux內核開始啟動,初始化各種軟硬件環境,加載驅動程序,掛載根文件系統,並執行init程序,由此開啟Android的世界。(這一步則是Android內核開發過程中需要涉及的地方)
第四階段:Linux內核啟動了系統中的第一個進程,init進程,也是root進程。通過腳本文件init.rc啟動如下服務。
1、它啟動了一些本地服務(Local Service),也指運行在C++層的系統守護進程,如Service Manager,Installd(後面我們會講到),Zygote。
2、啟動了一些Android Service,Android服務是指運行在Dalvik虛擬機進程中的服務。
每一個由init直接啟動的本地服務都是一個獨立的Linux進程
Init進程啟動Service Mananger
init.rc位於system/core/rootdir/init.rc中,其中啟動servicemanger的代碼為:
service servicemanager /system/bin/servicemanager user system critical onrestart restart zygote onrestart restart media第一行關鍵字service表明Service Manager是以服務的形式啟動的,它對應的程序文件和進程名稱分別為/system/bin/servicemanager和servicemanager。
第三行的關鍵字critical表明Service Manger是系統的一個關鍵服務。在系統的運行過程中,關鍵服務是不可以退出的,一旦退出,就會被系統重啟。
第四行和第五行的關鍵字onrestart表示一旦Sevice Manger被系統重啟,就需要將zygote和media兩個進程重新啟動。
Service Manager進程的執行過程,請參考Service Manager進程啟動,睡眠等待在進程proc->wait。
Init進程啟動Installd進程
service installd /system/bin/installd socket installd stream 600 system systemInstalld進程在端口地址600等待socket的請求。
表示Installd進程在啟動的過程中,需要在內部創建一個名稱為installd的Socket。這個Socket是用來執行進程間通信的,它的訪問權限被設置為600。
Init進程啟動Zygote進程
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server socket zygote stream 666 onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onrestart restart netd
參考Zygote進程的啟動流程。
Zygote進程啟動System進程
參考System進程的啟動流程第一部分,System進程的啟動流程第二部分。
啟動Launcher進程
參考Launcher進程的啟動。
在Launcher進程中啟動Home Screen。
參考Home界面的啟動。
翻譯 By Long Luo 原文鏈接:Introducing Smoothie Pattrn UI中的很大一部分是在滑動時從雲端獲取圖片列表。所以我
當應用運行起來後就會開啟一條線程,線程中會運行一個任務棧,當Activity實例創建後就會放入任務棧中。Activity啟動模式的設置在AndroidManifest.x
在開發應用程序的時候,經常會遇到這樣的情況,會在運行時動態根據條件來決定顯示哪個View或某個布局。那麼最通常的想法就是把可能用到的View都寫在上面,先把它們的可見性都
大家看到微信首頁切換效果有沒有覺得很炫,滑動切換,點擊底部bar瞬間切換,滑動切換漸變效果,線上效果圖:之前也在博客上看到別人的實現,再次基礎上,我做了些優化。首先說下實