編輯:關於Android編程
一、Android init進程啟動
還是從Linux的啟動開始吧。Linux被bootloader加載到了內存之後,開始運行,在初始化完Linux運行環境之後,掛載ramdisk.img根文件系統映像,運行裡面的init程序,這也是Linux的第一個用戶程序,其pid為1。下面的文章是作者關於init進程啟動的描述。
二、Android本地服務的啟動
init進程啟動完之後,開始初始化並啟動Dalvik虛擬機,在Dalvik虛擬機啟動之前做了一些工作,請看下面一篇文章。
Android啟動總結:
init進程在執行過程中可以分為以下幾個階段:
Ø 啟動准備:創建文件系統的基本目錄、打開標准輸入、標准輸出、標准錯誤,初始化log日志功能等
Ø 解析init.rc和init.hardware.rc文件:將rc文件逐行解析成Action或Service。解析出來的Action和Service分別存放在action_list和service_list鏈表裡,每個Action都對應一個或多個Commands,每個依附於Action的Commands也由一個鏈表維護。www.2cto.com
Ø 將early-initAction添加到action_queue隊列裡,等待執行
Ø 將init Action添加到action_queue隊列裡,等待執行
Ø 添加其它條件的Action到action_queue隊列裡
Ø 進入死循環
o 從action_queue隊列裡依次取出每個Action,執行其維護的Commands鏈表裡的命令
o 重新啟動service_list中標記為SVC_RESTARTING服務
o 監聽系統屬性狀態變化事件、子進程信號、Keychord組合按鍵事件
注:在代碼裡沒有明顯運行service_list裡服務的代碼,每個服務都有一個class屬性,該屬性決定了服務的分類,在init.rc文件的on boot Action最後有兩個命令:
on boot
…
...
class_start core
class_start main
class_start命令是指運行某一類的服務,先啟動了class為core的服務,然後再啟動了class為main的服務。
init.rc中class為core的服務有:
Service名
對應程序及參數
ueventd
/sbin/ueventd
console
/system/bin/sh
adbd
/sbin/adbd
servicemanager
/system/bin/servicemanager
vold
/system/bin/vold
class為main的服務有:
Service名
對應程序及參數
netd
/system/bin/netd
debuggerd
/system/bin/debuggerd
ril-daemon
/system/bin/rild
surfaceflinger
/system/bin/surfaceflinger
zygote
/system/bin/app_process -Xzygote /system/bin --zygote--start-system-server
drm
/system/bin/drmserver
media
/system/bin/mediaserver
bootanim
/system/bin/bootanimation
dbus
/system/bin/dbus-daemon --system --nofork
bluetoothd
/system/bin/bluetoothd -n
installd
/system/bin/installd
flash_recovery
/system/etc/install-recovery.sh
racoon
/system/bin/racoon
mtpd
/system/bin/mtpd
keystore
/system/bin/keystore /data/misc/keystore
dumpstate
/system/bin/dumpstate -s
前言: 目前網上有很多圓角圖片的實例,Github上也有一些成熟的項目。之前做項目,為了穩定高效都是選用Github上的項目直接用。但這種結束也是Android開發必備技
在開發的時候遇到一個問題,就是一觸摸對話框邊緣外部,對話框會自動消失。這個問題很糾結啊,查找了一下發現從Android 4.0開始,AlertDialog有了
自從開始負責公共控件模塊開始,我一直都想好好分析一下Android事件傳遞流程,相信網上有一大堆相關文章,但是我個人覺得作為一個專業的控件開發人員,如果只是知道一下大概,
1.自定義控件有一個方法是在原生控件的基礎上進行的拓展,增加新的功能,修改顯示的UI等,一般我們可以子啊onDraw()方法中隊原生的控件進行的拓展。2.下面以為text