編輯:關於Android編程
系統對四大組件的過程進行了很大程度的封裝,日常開發中並不需要了解底層的工作原理,那麼研究這些原理的意義在哪裡呢?
如果你想在技術上更進一步,那麼了解一些系統的工作原理是十分必要的,也是開發人員日後成長為高級工程師所必備的技術能力。 Android作為一個優秀的基於Linux操作系統,其內部一定有很多值得我們學習的地方,通過對Android操作系統的學習對提高開發人員的內功有很大的好處。 如果你從事Android Rom開發,那就沒什麼好說的了,看源碼吧。本文側重於對四大組件工作過程的分析,通過分析他們的工作過程理解系統內部運行機制,加深我們對Android整體系統結構的認識。
Android相關部分的源碼實在是太多,全部貼上了太過繁瑣,所以借用了amurocrash同學的UML圖使得整個流程更加容易理解。
注<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCsb0tq9BY3Rpdml0ebXE1ebKtcq1z9bKx9PJQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5zdGFydEFjdGl2aXR5t723qMC0zeqzybXEoaPV4rj2t723qLe1u9hBY3Rpdml0eU1hbmFnZXJTZXJ2aWNloaMgQWN0aXZpdHlNYW5hZ2VyU2VydmljZaOoQU1To6m8zLPQ19RBY3Rpdml0eU1hbmFnZXJOYXRpdmWjrLb4QWN0aXZpdHlNYW5hZ2VyTmF0aXZlvMyz0NfUQmluZGVysqLKtc/WwctJQWN0aXZpdHlNYW5hZ2Vy1eK49kJpbmRlcr3Tv9qjrNLytMtBTVPSssrH0ru49kJpbmRlcqGjIEFNU9XiuPZCaW5kZXK21M/zssnTw7WlwP3Eo8q9ttTN4szhuamjrLXa0ru0zrX308PL/LXEZ2V0t723qMqxu+HNqLn9Y3JlYXRlt723qLP1yry7r6OsuvPQ+LX308PW0NaxvdO3tbvY1q7HsLS0vai1xLbUz/OhoyC0021ha2VBcHBsaWNhdGlvbrXEyrXP1r/J0tS/tLP2o6zI57n7QXBwbGljYXRpb27S0b6tsbu0tL2ouf3By6OsxMfDtL7Nsru74dTZ1ti4tLS0vaijrNXi0rLS4s6218XSu7j206bTw9a709DSu7j2QXBwbGljYXRpb2621M/zoaNBcHBsaWNhdGlvbrXEtLS9qNKyysfNqLn9SW5zdHJ1bWVudGF0aW9uwLTN6rPJtcSjrNXiuPa5/bPMus1BY3Rpdml0ebbUz/O1xLS0vai5/bPM0rvR+aOstrzKx82ouf3A4LzT1NjG98C0yrXP1rXEoaMgQ29udGV4dEltcGzKx0NvbnRleHS1xL7fzOXKtc/Wo6xDb250ZXh0SW1wbMrHzai5/UFjdGl2aXR5tcRhdHRhY2i3vbeowLS6zUFjdGl2aXR5vajBornYwaq1xKOs1NphdHRhY2i3vbeo1tBBY3Rpdml0ebu5u+HN6rPJV2luZG93tcS0tL2osqK9qMGi19S8urrNV2luZG93tcS52MGqo6zV4tH5tbFBY3Rpdml0eb3Tyty1vcrCvP6+zb/J0tS0q7XduPh3aW5kb3fBy6GjDQo8aDEgaWQ9"service的工作過程">Service的工作過程
啟動過程
綁定過程
注
- Service有兩種狀態:啟動狀態和綁定狀態,兩種狀態是可以共存的。
BroadcastReceiver的工作過程包括廣播注冊過程、廣播發送和接收過程。
動態注冊
發送接收
注:
靜態注冊是由PackageManagerService(PMS)在應用安裝的時候完成整個注冊過程的,除廣播以外,其他三大組件也都是在應用安裝時由PMS解析並注冊的。 廣播的發送有幾種類型:普通廣播、有序廣播和粘性廣播,有序廣播和粘性廣播與普通廣播相比具有不同的特性,但是發送和接收過程是類似的。 FLAG_INCLUDE_STOPPED_PACKAGES:廣播會發送給已經停止的應用,FLAG_EXCLUDE_STOPPED_PACKAGES廣播不會發送給已經停止的應用 從Android 3.1開始,處於停止狀態的應用無法接受到開機廣播。啟動過程
當ContentProvider所在的進程啟動時,會同時被啟動並被發布到AMS中,需要注意的是,這個時候它的onCreate要先去Application的onCreate執行,這在四大組件中是一個少有的現象。 用啟動的入口為ActivityThread的main方法,main方法會創建ActivityThread實例並創建主線程消息隊列。 attach方法中遠程調用AMS的attachApplication方法,並提供ApplicationThread用於和AMS的通信。 attachApplication方法會通過bindApplication方法和H來調回ActivityThread的handleBindApplication,這個方法會先創建Application,再加載ContentProvider,然後才會回調Application的onCreate方法。 ContentProvider的multiprocess屬性決定了ContentProvider是否是單例(false時),一般都用單例。 ontentResolver的具體類是ApplicationContentResolver,當ContentProvider所在進程未啟動時,第一次訪問它會觸發ContentProvider的創建以及進程啟動。Query流程
insert,delete和update方法類似,這裡就不在分析了。
下面結合我對這一部分的學習,自己做一個小節。Android5.0之後組件必須使用顯示intent來啟動,如果為隱示的,則設置Intent的包名。intent.setPac
在程序開發過程中,LOG是廣泛使用的用來記錄程序執行過程的機制,它既可以用於程序調試,也可以用於
使用Eclipse做Android開發,需要先在Eclipse上安裝ADT(Android Development Tools)插件。1.安裝JDK 1.7JDK下載:h
關鍵詞:bluedroid enableNative BTIF_TASK BTU_TASK bt_hc_work_thread set_power preload