導航:首頁 > 操作系統 > android的構成和工作流程

android的構成和工作流程

發布時間:2022-09-03 02:40:11

android app開發流程有哪些環節

android app開發流程具體步驟如下:
一 應用開發規劃:
※確定app軟體功能。
※必須的app應用界面及界面跳轉的流程。
※開發app需要的數據及數據的來源及格式。
※是否需要服務端支持。
※是否需要本地資料庫支持。
※是否需要特殊許可權。
※是否需要後台服務。

二 架構設計:
※分層。
※網路連接。
※數據處理-xml、domain。
※封裝Activity。
三 界面設計:
※主界面確定。
※模塊界面、列表、查看、編輯界面。
※菜單、按鈕、對話框、提示信息。
※界面總體顏色。

四 數據操作和存儲:
※數據來源。
※數據類型。
※存儲方式。

五 業務實現:
※客戶端業務解析。

六 頁面跳轉:
※每個頁面間的跳轉。
※菜單、按鈕、事件等。
二、Android APP開發過程中需要注意的問題:
(1)Android APP開發有自己規范的一套標准,在開發中必須無條件遵守。
(2)在Android APP開發過程中,需要根據不同特性來進行優化。
(3)需要針對特定屏幕密度使用特定的圖標和點陣圖。
(4)避免利用那些智能手機可能不支持的硬體功能。
(5)還要針對網頁的布局來調整字體的大小和觸控按鈕。

⑵ 當我們按下電源鍵,Android 究竟做了些什麼

一、啟動電源及系統啟動

系統從 ROM 中開始啟動,載入引導程序到 RAM ,然後執行。

二、引導程序

引導程序是 Android 操作系統開始運行前的一個小程序,因此它需要針對特定主板與晶元,並不是 Android 操作系統的一部分。引導程序是OEM廠商或運行商進行加鎖、限制的地方。

1、兩個階段 檢測外部 RAM 以及為第二階段載入程序; 設置網路、內存等,搭建內核運行環境(為了達到特殊目的時,引導程序可以根據配置參數或者輸入數據來設置內核)。 2、引導程序的載入器

Android引導程序可以在ootableootloaderlegacyusbloader找到,傳統的載入器包含的兩個文件:

init.s 初始化堆棧,清零BSS段,會調用 main.c 中的 _main()函數 (bss segment:通常是指用來存放程序中未初始化的全局變數的一塊內存區域;BSS - Block Started by Symbol。BSS段屬於靜態內存分配); main.c 初始化硬體,創建 linux 標簽。 三、內核啟動

Android 內核啟動方式類似桌面 linux,主要步驟:

1. 設置緩存 2. 被保護存儲器 3. 計劃列表 4. 載入驅動

當內核完成系統設置,接下來即將啟動系統的第一個進程 —init 進程

四、init 進程

作為 Android 系統的第一個進程,其PID為0,通過解析 init.rc 腳本來構建出系統初始運行形態,這一階段中,「Android」 logo 會顯示出來。

備註:系統中,大多數系統服務程序都是在該腳本中描述並被相繼啟動的。

init.rc 由4種類型聲明組成:Actions、Commands、Services、Options

Actions: 響應某事件的過程。當「trigger」所描述的觸發事件產生時,則依次執行各種「command」; 源碼角度來看,系統會對 init.rc 中各「trigger」進行匹配,當發現符合條件的 Action,就將它加入「命令執行隊列」尾部(除非 Action 已存在隊列中),然後系統再對這些命令按順序進行。 on <trigger> ##觸發條件 <command1> ##執行命令 <command2> ##可執行多個命令 ... Commands: 命令將在所屬事件發生時被一個個執行。 Services: 可執行程序,它們在特定選項的約束下會被 init 程序運行或者重啟 備註:Service 可以在配置中指定是否需要退出重啟,那麼,當 Service 出現異常 crash 時,可有機會復原。 service <name><pathname> [<argument>]* <option> <option> Options: 對 service 的約束選項 五 &六、 ServiceManager、Zygote、SystemServer

科普: Daemons - 守護進程

init進程通過解析 init.rc 來陸續啟動其他關鍵的系統服務進程,其中最重要的是 ServiceManager、Zygote 和 SystemServer 三者,下面我們逐一解析:

1、ServiceManager — Binder 機制支撐者

概述:ServiceManager 是 Binder 機制中的支撐者,負責某 Binder 服務注冊信息到底層 Binder 驅動分配的值解析。

ServiceManager 由 init 進程解析 rc 腳本時啟動,屬於 core 類,其他同類進程包括:uenetd、console、adbd等。根據 core 組的特性,這些進程會同時啟動或停止。另外,ServiceManager 配置含有 critical 屬性,這意味著它是系統關鍵進程(如果進程不幸在4分鍾內異常退出超過4次,設備將重啟並進入還原模式)。當 ServiceManager 每次重啟時,其他關鍵進程:zygote、media、surfaceflinger 等也會被 restart。

2、Zygote — 「孕育」新線程與進程

Android 中大多數應用進程與系統進程都是通過 Zygote 來生成的。Zygote 同樣由 init 解析 rc 腳本時啟動,屬於 main 類,同屬 main 類的系統進程有:netd、debuggerd、rild等。Zygote並不是處於獨立的程序中的,它所在程序名為「app_process」,觀察 app_process 主函數實現知道,如果 init.rc 中指定了 —zygote選項,app_process 接下來將啟動「ZygoteInit」,並傳入「start-system-server」,這樣,ZygoteInit 就會運行在虛擬機上(Dalvik VM)上了。

ZygoteInit 函數有兩項重要工作:

預裝載各種系統類; 搭建 SystemServer 環境,並啟動 SystemServer(大部分的 Android 系統服務都在其中,由 java 編寫)。

ZygoteInit 流程總結(摘自:Gityuan — Android 系統啟動-Zygote 篇):

解析init.zygote.rc中的參數,創建AppRuntime並調用AppRuntime.start()方法; 調用AndroidRuntime的startVM()方法創建虛擬機,再調用startReg()注冊JNI函數; 通過JNI方式調用ZygoteInit.main(),第一次進入Java世界; registerZygoteSocket()建立socket通道,zygote作為通信的服務端,用於響應客戶端請求; preload()預載入通用類、drawable和color資源、openGL以及共享庫以及WebView,用於提高ap啟動效率; zygote完畢大部分工作,接下來再通過startSystemServer(),fork得力幫手system_server進程,也是上層framework的運行載體; zygote功成身退,調用runSelectLoop(),隨時待命,當接收到請求創建新進程請求時立即喚醒並執行相應工作。

ZygoteInit 結束後,開機Logo就出來了。 注意:這里並不包括開機動畫,而是開機前 「Android」 Logo 出現的那個畫面,開機動畫出現之前還需要進行各種載入,開機動畫是在「Android」 Logo 出現之後才播放的。

3、SystemServer — 大部分 Android 系統服務所在地

SystemServer 是 Android 進入 Launcher 前的最後准備,它提供了眾多的由「Java」語言編寫的系統服務。 如果 init.rc 中為 zygote 指定啟動參數 —start-system-server,那麼 ZygotyeInit 就會調用 startSystemServer 來進入 SystemServer。

startSystemServer函數解析:

首先 ZygoteInit 通過 Zygote.forkSystemServer 來生成一個新的線程(fork),用於承載各種系統服務。(源碼角度:Zygote 內部由 Native 函數 Dalvik_dalvik_system_Zygote_forkSystemServer 來進一步實現,最終調用底層介面的 fork 介面來實際產生進程); 根據fork特性,子進程與父進程將獲得相同的代碼環境。pid為0為子進程,否則為父進程;如果是前者,則進一步調用 handleSystemServerProcess(parseArgs)函數來完成最核心的工作 —「啟動各系統服務」(源碼角度:handleSystemServerProcess 方法將 startSystemServer 中的 parsedArgs.remainingArgs 參數傳給 RuntimeInit.zygoteInit,後者又調用 nativeZygoteInit 函數); nativeZygoteInit 調用後,接著,三個重要的 static 函數就要被執行了:init1 - 完成本地Service(SurfaceFlinger、AudioFlinger等)啟動,完成後調用 init2、init2 - 新建一個新的帶 Looper 的線程 ServerThread來啟動 Java層各 Service。

⑶ 請簡述什麼是android事件處理,並分析兩種android事件處理機制的實現過程和區別

UI編程通常都會伴隨事件處理,Android也不例外,它提供了兩種方式的事件處理:基於回調的事件處理和基於監聽器的事件處理。

對於基於監聽器的事件處理而言,主要就是為Android界面組件綁定特定的事件監聽器;對於基於回調的事件處理而言,主要做法是重寫Android組件特定的回調函數,Android大部分界面組件都提供了事件響應的回調函數,我們主要重寫它們就行。


一 基於監聽器的事件處理

相比於基於回調的事件處理,這是更具「面向對象」性質的事件處理方式。在監聽器模型中,主要涉及三類對象:

1)事件源Event Source:產生事件的來源,通常是各種組件,如按鈕,窗口等。

2)事件Event:事件封裝了界面組件上發生的特定事件的具體信息,如果監聽器需要獲取界面組件上所發生事件的相關信息,一般通過事件Event對象來傳遞。

3)事件監聽器Event Listener:負責監聽事件源發生的事件,並對不同的事件做相應的處理。


基於監聽器的事件處理機制是一種委派式Delegation的事件處理方式,事件源將整個事件委託給事件監聽器,由監聽器對事件進行響應處理。這種處理方式將事件源和事件監聽器分離,有利於提供程序的可維護性。

舉例:

View類中的OnLongClickListener監聽器定義如下:(不需要傳遞事件)


[java] view plainprint?

public interface OnLongClickListener {

boolean onLongClick(View v);

}

public interface OnLongClickListener {
boolean onLongClick(View v);
}


View類中的OnLongClickListener監聽器定義如下:(需要傳遞事件MotionEvent)

[java] view plainprint?

public interface OnTouchListener {

boolean onTouch(View v, MotionEvent event);

}

public interface OnTouchListener {
boolean onTouch(View v, MotionEvent event);
}

二 基於回調的事件處理

相比基於監聽器的事件處理模型,基於回調的事件處理模型要簡單些,該模型中,事件源和事件監聽器是合一的,也就是說沒有獨立的事件監聽器存在。當用戶在GUI組件上觸發某事件時,由該組件自身特定的函數負責處理該事件。通常通過重寫Override組件類的事件處理函數實現事件的處理。

舉例:

View類實現了KeyEvent.Callback介面中的一系列回調函數,因此,基於回調的事件處理機制通過自定義View來實現,自定義View時重寫這些事件處理方法即可。

[java] view plainprint?

public interface Callback {

// 幾乎所有基於回調的事件處理函數都會返回一個boolean類型值,該返回值用於

// 標識該處理函數是否能完全處理該事件

// 返回true,表明該函數已完全處理該事件,該事件不會傳播出去

// 返回false,表明該函數未完全處理該事件,該事件會傳播出去

boolean onKeyDown(int keyCode, KeyEvent event);

boolean onKeyLongPress(int keyCode, KeyEvent event);

boolean onKeyUp(int keyCode, KeyEvent event);

boolean onKeyMultiple(int keyCode, int count, KeyEvent event);

}

public interface Callback {
// 幾乎所有基於回調的事件處理函數都會返回一個boolean類型值,該返回值用於
// 標識該處理函數是否能完全處理該事件
// 返回true,表明該函數已完全處理該事件,該事件不會傳播出去
// 返回false,表明該函數未完全處理該事件,該事件會傳播出去
boolean onKeyDown(int keyCode, KeyEvent event);
boolean onKeyLongPress(int keyCode, KeyEvent event);
boolean onKeyUp(int keyCode, KeyEvent event);
boolean onKeyMultiple(int keyCode, int count, KeyEvent event);
}

三 比對

基於監聽器的事件模型符合單一職責原則,事件源和事件監聽器分開實現;

Android的事件處理機制保證基於監聽器的事件處理會優先於基於回調的事件處理被觸發;

某些特定情況下,基於回調的事件處理機制會更好的提高程序的內聚性。


四 基於自定義監聽器的事件處理流程

在實際項目開發中,我們經常需要自定義監聽器來實現自定義業務流程的處理,而且一般都不是基於GUI界面作為事件源的。這里以常見的app自動更新為例進行說明,在自動更新過程中,會存在兩個狀態:下載中和下載完成,而我們的程序需要在這兩個狀態做不同的事情,「下載中」需要在UI界面上實時顯示軟體包下載的進度,「下載完成」後,取消進度條的顯示。這里進行一個模擬,重點在說明自定義監聽器的事件處理流程。

4.1)定義事件監聽器如下:

⑷ android系統 主要有哪幾部分

android系統分為四部分,從高到低分別是:

1、Android應用層

2、Android應用框架層

3、Android系統運行層

4、Linux內核層

Android系統構架主要應用於ARM平台,但不僅限於ARM,通過編譯控制,在X86、MAC等體系結構的機器上同樣可以運行。

(4)android的構成和工作流程擴展閱讀

Android運行庫

Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。

每一個Android都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。

同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然後通過SDK中的「dx」工具轉化成.dex格式由虛擬機執行。

⑸ 安卓運行機制是什麼 安卓手機的工作原理是什麼

android基於Linux內核,很多系統也都基於Linux內核。但是android的特別之處除了開發上的特點以外,還有一個就是程序在運行時的行為和以往我接觸到的程序運行機制有很大不同。在傳統PC機或者其他一些手機上,用戶對應用程序有絕對的掌控權,在應用程序的系統菜單上選擇「退出」或者「關閉」之類的選項會直接殺死進程,而在android系統中不是這樣的。在android中,應用程序的生命周期並不是由應用程序自身直接控制的,而是由系統,當系統需要釋放內存來運行新進程或者保證某些後台進程和前端進程順利執行的時候才會釋放相應應用程序的資源,這個釋放過程有一個重要性的層次。
android中進程的層次如下(重要性由高到低):

1、前端進程。顧名思義,前端進程就是目前顯示在屏幕上和用戶交互的進程,在系統中前端進程數量很少,而這種進程是對用戶體驗的影響最大,只有系統的內存稀少到不足以維持和用戶的基本交互時才會銷毀前端進程。因此這種進程重要性是最高的。

2、可見進程。可見進程也擁有一個可視化的界面,只是目前不是最上層界面(最上層界面在前端進程裡面),可見進程一般調用了OnPause(),可見進程比前端進程重要性低,但是在交互方面影響還是很大,因為用戶可能隨時切換過去,所以系統不會輕易銷毀它。

3、服務進程。一個服務進程就是一個Service,它調用了startService,就是UNIX中說的守護進程,對用戶不可見,但是保證了一些重要的事件被監聽或者維持著某些狀態,比如網路數據傳輸、後台音樂播放,這類進程在內存不足且為了保證前端交互的順利進行的時候被銷毀。

4、後台進程。這里叫後台進程可能會和一般意義上的後台進程混淆,要說明的是,android里的後台進程是調用了OnStop()的,可以理解成用戶暫時沒有和這個進程交互的願望,所以這里後台進程有點「待銷毀」的意思。

5、空進程。這是一種系統緩存機制,其實就是個進程的外殼,當有新進程創建的時候,這個空進程可以加快進程創建速度,當系統內存不足的時候,首先銷毀空進程。
android中進程重要性層次

⑹ android系統開發要用哪些知識

android 技術內幕系統卷
第1章 准備工作 /1 1.1 深入認識android /2 1.1.1 android的系統構架 /2 1.1.2 android的初始化流程 /5 1.1.3 各個層次之間的相互關系 /8 1.1.4 android系統開發(移植)和應用開發 /11 1.2 獲取和編譯android的源碼 /13 1.2.1 環境配置 /13 1.2.2 獲取android源碼 /14 1.2.3 編譯android的源碼及其工具包 /16 1.2.4 運行android系統 /21 1.3 開發環境搭建 /23 1.3.1 應用開發環境搭建 /23 1.3.2 源碼開發環境搭建 /26 1.4 android源碼結構 /32 1.5 小結 /33 第2章 android的內核機制和結構剖析 /34 2.1 linux與android的關系 /35 .2.1.1 為什麼會選擇linux /35 2.1.2 android不是linux /35 2.2 android對linux內核的改動 /37 2.2.1 goldfish /37 2.2.2 yaffs2 /38 2.2.3 藍牙 /39 2.2.4 調度器(scheler)/39 2.2.5 android新增的驅動 /40 2.2.6 電源管理 /41 2.2.7 雜項 /41 2.3 android對linux內核的增強 /42 2.3.1 alarm(硬體時鍾)/43 2.3.2 ashmem(匿名內存共享)/46 2.3.3 low memory killer(低內存管理)/52 2.3.4 logger(日誌設備)/56 2.3.5 android pmem /65 2.3.6 switch /79 2.3.7 timed gpio /88 2.3.8 android ram console /94 2.4 小結 /99 第3章 android的ipc機制--binder /100 3.1 binder概述 /101 3.1.1 為什麼選擇binder /101 3.1.2 初識binder /102 3.2 binder驅動的原理和實現 /102 3.2.1 binder驅動的原理 /102 3.2.2 binder驅動的實現 /103 3.3 binder的構架與實現 /132 3.3.1 binder的系統構架 /132 3.3.2 binder的機制和原理 /133 3.4 小結 /150 第4章 電源管理 /151 4.1 電源管理概述 /152 4.2 電源管理結構 /152 4.3 android的電源管理機制 /153 4.4 android電源管理機制的實現 /154 4.5 小結 /187 第5章 驅動的工作原理及實現機制 /188 5.1 顯示驅動(framebuffer)/189 5.1.1 framebuffer的工作原理 /189 5.1.2 framebuffer的構架 /190 5.1.3 framebuffer驅動的實現機制 /190 5.2 視頻驅動(v4l和v4l2)/201 5.2.1 v4l2介紹 /201 5.2.2 v4l2的原理和構架 /201 5.2.3 v4l2的實現 /202 5.3 音頻驅動(oss和alsa)/208 5.3.1 oss與alsa介紹 /208 5.3.2 oss的構架與實現 /209 5.3.3 alsa的構架與實現 /213 5.4 mtd驅動 /214 5.4.1 mtd驅動的功能 /214 5.4.2 mtd驅動的構架 /215 5.4.3 mtd驅動的原理及實現 /215 5.5 event輸入設備驅動 /223 5.5.1 input的系統構架 /223 5.5.2 event輸入驅動的構架 /224 5.5.3 event輸入驅動的原理 /224 5.5.4 event輸入驅動的實現 /225 5.6 藍牙驅動(bluetooth)/235 5.6.1 bluetooth驅動的構架 /235 5.6.2 bluez的原理及實現 /237 5.7 wlan驅動(wi-fi)/244 5.7.1 wlan構架 /244 5.7.2 wi-fi驅動的實現原理 /245 5.8 小結 /245 第6章 原生庫的原理及實現 /246 6.1 系統c庫(bionic libc)/247 6.1.1 bionic libc功能概述 /247 6.1.2 bionic libc實現原理 /248 6.2 功能庫 /258 6.2.1 webkit構架與實現 /258 6.2.2 多媒體框架與實現 /275 6.2.3 android sqlite框架及原理 /285 6.3 擴展庫 /289 6.3.1 skia底層庫分析 /289 6.3.2 opengl底層庫分析 /299 6.3.3 android-openssl實現及運用 /306 6.3.4 freetype及font engine manager /317 6.3.5 freetype結構體系和渲染流程 /317 6.4 原生服務 /328 6.4.1 audioflinger實現 /328 6.4.2 surfaceflinger實現 /341 6.5 小結 /353 第7章 硬體抽象層的原理與實現 /354 7.1 硬體抽象層的實現原理 /355 7.1.1 android hal構架 /355 7.1.2 android hal的實現 /357 7.2 android overlay構架與實現 /361 7.2.1 android overlay系統構架 /361 7.2.2 overlay hal框架與實現 /362 7.2.3 overlay與surfacefinger /369 7.3 android camera 構架與實現 /375 7.3.1 android camera系統構架 /375 7.3.2 camera hal框架與實現 /377 7.3.3 camera本地實現 /385 7.4 android audio hal實現 /394 7.4.1 audio hal框架 /395 7.4.2 android默認的audio hal實現 /398 7.4.3 mp功能的audio hal實現 /400 7.4.4 基於a2dp的藍牙音頻設備hal實現 /402 7.4.5 模擬器上的audio hal實現 /403 7.5 android ril實現 /404 7.5.1 android ril構架 /404 7.5.2 radiooptiongs實現 /407 7.5.3 libril庫實現 /409 7.5.4 reference-ril庫實現 /415 7.5.5 rild守護進程實現 /418 7.5.6 request流程分析 /423 7.5.7 response流程分析 /427 7.6 android sensor hal實現 /434 7.6.1 android sensor構建 /434 7.6.2 sensor hal介面 /435 7.6.3 sensor hal實現 /438 7.7 android wifi hal實現 /441 7.7.1 android wifi系統構架 /441 7.7.2 wpa_supplicant框架 /442 7.7.3 wifi hal實現 /444 7.8 android藍牙本地實現 /447 7.8.1 android藍牙構架 /447 7.8.2 bluez結構體系 /448 7.8.3 bluez適配層 /452 7.9 android 定位實現 /453 7.9.1 定位系統構架 /453 7.9.2 gps hal實現 /454 7.10 android power hal實現 /459 7.11 android vibrator hal實現 /461 7.12 小結 /462 第8章 dalvik虛擬機的構架、原理與實現 /463 8.1 dalvik虛擬機概述 /464 8.1.1 什麼是dalvik虛擬機 /464 8.1.2 dalvik虛擬機的功能 /464 8.1.3 dalvik虛擬機與java虛擬機的區別 /465 8.2 dalvik構架與實現 /466 8.2.1 dalvik系統構架 /466 8.2.2 dx和dexmp工具 /468 8.2.3 .dex文件格式解析 /470 8.2.4 dalvik內部機制 /487 8.2.5 dalvik進程管理 /492 8.2.6 dalvik內存管理 /501 8.2.7 dalvik載入器 /509 8.2.8 dalvik解釋器 /517 8.2.9 dalvik jit /519 8.3 jni的構架與實現 /523 8.3.1 jni構架 /523 8.3.2 jni實現 /524 8.4 小結 /526 第9章 android 核心庫 /527 9.1 android核心庫簡介 /528 9.2 android系統api /529 9.2.1 android包 /529 9.2.2 android資源包 /529 9.2.3 apicheck機制 /529 9.3 小結 /532 後記 /533

⑺ 深入理解Android的內容簡介

《深入理解Android(卷1)》共10章,第1章介紹了閱讀本書所需要做的准備工作,主要包括對Android系統架構和源碼閱讀方法的介紹;第2章通過對Android系統中的MediaScanner進行分析,詳細講解了Android中十分重要的JNI技術;第3章分析了init進程,揭示了通過解析init.rc來啟動Zygote以及屬性服務的工作原理;第4章分析了Zygote、SystemServer等進程的工作機制,同時還討論了Android的啟動速度、虛擬機HeapSize的大小調整、Watchdog工作原理等問題;第5章講解了Android系統中常用的類,包括sp、wp、RefBase、Thread等類,同步類,以及Java中的Handler類和Looper類,掌握這些類的知識後方能在後續的代碼分析中做到游刃有餘;第6章以MediaServer為切入點,對Android中極為重要的Binder進行了較為全面的分析,深刻揭示了其本質。第7章對Audio系統進行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入講解了Surface系統的實現原理,分析了Surface與Activity之間以及Surface與SurfaceFlinger之間的關系、SurfaceFlinger的工作原理、Surface系統中的幀數據傳輸以及LayerBuffer的工作流程。第9章對Vold和Rild的原理和機制進行了深入的分析,同時還探討了Phone設計優化的問題;第10章分析了多媒體系統中MediaScanner的工作原理。
《深入理解Android(卷1)》適合有一定基礎的Android應用開發工程師和系統工程師閱讀。通過對本書的學習,大家將能更深刻地理解Android系統,從而自如應對實際開發中遇到的難題。

⑻ Android OTA 的工作流程是怎樣的

1、獲取並下載OTA格式的.zip文件
2、重啟至recovery,並應用OTA格式升級包
3、recovery首先驗證升級包的數字簽名。根據.zip里的內容,修改(覆蓋)對應的文件,特別是/system分區的
4、重啟至系統,系統會將/system,/data分區內已安裝的應用程序,以及Framework內的apk格式文件(以.jar擴展名存在)全部重新"安裝"一遍,期間顯示「Android正在更新」之類的字眼
實際上是建立odex文件。

對於Dalvik執行環境,是把apk中的dex文件"解壓縮"為性能更好的odex,期間還有檢查等項目。

對於Android RunTime執行環境,則是利用LLVM把dex編譯為二進制機器碼的oat格式,再封裝成elf這種常見於(類)unix操作系統的可執行文件格式,但實際的擴展名依然是odex。
5、升級完畢,把控制權交給用戶。

⑼ Android系統原理及開發要點詳解的前 言

Android 是Google歷經數年和投資數億美元開發出來的智能手機系統,Google也發起了圍繞Android的組織——開放手機聯盟,其英文全稱為「Open Handset Alliance」。
隨著各大移動終端生產商大力開發和生產基於Android的移動智能設備,Android迅速得到業界和社會的認可,並成為整個產業的熱點,基於Android平台的各類人才逐漸成為各大企業競相爭奪的焦點。
Android系統是一個開放的系統,任何公司、個人開發者、愛好者都可以參與其中。對於技術工作者,Android不僅是一個智能手機的系統,也可以作為學習嵌入式Linux系統的較完整的軟體平台。
Android是一個較新的系統和技術,因此介紹Android的資料和書籍還比較少,尤其簡體中文的書籍,相對更少。本書《Android系統原理及開發要點詳解》 是一本綜合介紹Android系統的書,集合了Androidin社區多位專家作者的經驗,精心編寫而成。
Android 作為一個龐大的系統,包括了Linux操作系統、各種本地程序、虛擬機和運行環境、Java框架和Java應用程序多方面的內容。這對於初學者是一個非常大的挑戰,因此對於學習、研究進而開發Android系統來說,掌握系統的脈絡和使用恰當的學習方法是非常重要的,這也是本書的組織主旨。
本書特點
為了適應Android系統的情況,本書在內容的編排和組織上具有以下一些重要特點。
保持完整性和層次性
本書緊緊把握Android系統的4個層次,分章節介紹,並且有重點地介紹了Android整個系統的代碼結構、編譯系統、相關工具、各部分組織等全局性內容。這將讓讀者即使只花費較短的時間,也可以獲得對Android系統大致的感性理解。
提供清晰的框架
Android是一個有數百兆大小的較大系統,各部分之間是有機聯系的,這就要求Android的學習和開發者需要具有一些軟體架構方面的知識。本書為Android整體和重點模塊繪制了大量的框圖,這樣非常有利於幫助讀者直觀地理解系統。本書在講述每一個部分時,均列出相關代碼的路徑,幫助讀者對應著進行快速、高效地學習。
抓核心內容
Android系統已經發布了若干個版本:1.0、1.5(cupcake)、1.6(donut)和2.0(eclair),從開發的角度,各個版本在同時使用,這對於學習者是一個較大的挑戰。因此本書作者通過把握Android演進中脈絡,盡量總結出共性的內容展示給讀者。在某些部分,在講解代碼的同時,突出概念性的內容。本書力求通過一本教材,給讀者一個長期的、穩定的學習方法和思路。
開發細節
Android 包含眾多的軟體、程序和工具,涉及軟體開發各個方面。在實際的開發過程中,很多內容並不需要開發者去改動。本書從工程的角度出發,偏重開發中常用的內容,對於開發中較少涉及的部分,僅做精煉的大致介紹。本書重點介紹顯示機制、輸入機制、音頻/視頻系統的移植層、多媒體系統的構建、電話系統的構建、連接系統的構建、感測器的移值、應用開發中最常涉及的部分,在每段講解中,穿插了開發中可以使用的一些技巧。
本書內容
本書的各個章節及其組織方式如下所示。
第1章「Android系統概述」,概述Android系統方面的內容,包括智能手機平台的發展歷程、Android系統的特點、Android的3種開發工作,以及Android的2種不同的開發方式。
第2章「Android系統開發綜述」,介紹Android系統開發的綜述性內容,包括工具使用、獲得代碼、編譯系統、模擬器運行、SDK使用等。
第3章「Android的Linux內核與驅動程序」,介紹Android內核的特點、Android中使用的專用驅動程序、Android系統可能使用的標准設備驅動。
第4章「Android的底層庫和程序」,介紹Android系統的基礎程序,以本地程序為主。
第5章「Android的Java虛擬機和Java環境」,這是介於本地和Java層之間的相關內容,主要介紹Android的Java虛擬機Dalvik的基本概念、Android Java程序的環境、JNI的使用方法,以及Java框架的啟動流程等。
第6章「Android的GUI系統」,包括Android GUI系統架構、底層的pixelflinger和libui庫、Surface系統、Skia和2D圖形系統、Android的OpenGL和3D圖形系統等內容。
第7章「Android的Audio系統」,主要是音頻的輸入輸出環節,音頻系統從驅動程序、本地框架到Java框架都具有內容。
第8章「Android的Video輸入輸出系統」,介紹Android的Video輸入輸出系統,包括Overlay系統和Camera系統兩個部分,前者只有本地的內容,後者各個層次均有內容。
第9章「Android的多媒體系統」,介紹Android的多媒體系統的核心部分,包括Android中多媒體系統的業務、結構、多媒體系統的核心框架、OpenCore系統結構和使用等內容。
第10章「Android的電話部分」,介紹Android系統在電話方面的功能,Android是智能手機系統,電話是其核心部分。
第11章「Android的連接部分」,主要包括WiFi、藍牙及定位系統等,這些Android的連接部分也具有從驅動層到Java應用層的結構。
第12章「Android的感測器系統」,感測器系統涉及Android的各個層次,具有完整的結構,相比其他系統,感測器系統的各個層次都比較簡單。
第6~12章分模塊介紹Android的幾個核心系統,主要是本地框架和Java框架方面的內容,兼顧應用程序和驅動層,這是本書的重點。
第13章「Android應用程序概述及框架」,介紹Android應用程序層的基本概念和應用程序框架,這部分內容是Android自下而上的第4個層次,可以基於源代碼或者SDK開發,它們之間的差別非常小。
第14章「Android應用程序的主要方面」,介紹Android應用程序層開發的各個方面,基本上是橫向內容,包括應用程序的基本控制、各種UI元素的使用、圖形API使用3個方面的內容。
第15章「Android應用程序的設計思想」,本章的內容是基於通用的應用程序和GUI程序的通用設計思想,結合Android系統自身的特點,提出一些值得注意的問題和設計方法。
本書讀者
本書適應廣大的讀者群,力求在Android的系統移植、應用程序開發、系統框架改進方面給讀者全面的支持。不同的讀者在學習本書時,應該使用不同的方法。
Android初級開發者:在本書指引下閱讀代碼,搭建系統開發環境,對於Android應用程序的開發者,重點關注後3章的內容。
Android中、高級開發者:通過本書的引導,學習系統架構,關注開發要點,並盡量使用手機系統的通用設計思想、軟體工程思想、系統工程思想來指導Android系統學習。
嵌入式Linux系統學習者:將Android作為一個集Linux核心和應用層程序於一體的系統進行學習,並可以利用Android的模擬環境運行和調試程序。
讀者在學習本書的過程中,應盡量對照本書的框圖和手頭的Android源代碼,這樣可以達到事半功倍的效果。本書在重點代碼中加上大量的注釋,幫助讀者閱讀,對於非重點的代碼,不佔用本書的篇幅,讀者可以參考開放的源代碼。可以採用順序讀和重點讀相結合的方式學習本書,順序讀關注系統框架,重點讀關注開發要點。
本書作者
本書在編寫過程中提煉和綜合Android早期開發者的經驗、中國大陸Androidin社區的開發成果,以及各位專家的經驗和技術,這是本書出版的知識源泉。本書主要由Androidin社區的兩名核心技術專家韓超和梁泉領銜規劃和編著,韓超統稿。總部設在南加州、專注於Android平台並提供其移動應用開發及解決方案的邁奔無線(mAPPn Inc.)也投入技術和人力參與了本書的工作。
參與本書編寫的還有於仕林、張宇、張超等人,趙家維、黃亮、沈楨、徐威特、楊鈺等參與了審校工作。
由於時間倉促,可能依然存在一些錯誤和問題,請讀者見諒,歡迎讀者討論和指點。

⑽ Android N 四大組件的工作原理

本文側重講解android N 系統中四大組件的工作原理,不同系統原理略有差別。通過分析四大組件的工作流程加深對Android Framework的理解,也為插件化開發打下基礎。

Activity
展示一個界面並和用戶交互,它扮演的是一個前台界面的角色。

Service
計算型組件,用於後台執行一系列計算任務,工作在主線程,耗時操作需要另起線程, 分為啟動狀態和綁定狀態。

BroadcastReceiver
消息型組件,主要用於不同組件或者不同應用之間的消息傳遞,它工作在系統內部,不適合執行耗時操作,操作超過5s,會出現ANR。

ContentProvider
數據共享型組件,用於向其他組件或者應用共享數據,主要執行CURD操作。

我們啟動一個activity有兩種方法,
第一種(Activity直接啟動方式):
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);

第二種(Context啟動方式)
Intent intent = new Intent(this, MainActivity.class);
getApplicationContext().startActivity(intent);

不同的啟動方式Activity的工作流程有點差別。

兩種啟動都會調用到Instrumentation類中的execStartActivity的方法,系統最終是通過ActivityThread中的performLaunchActivity完成Activity的創建和啟動。
performLaunchActivity方法主要完成以下工作:
1、通過ActivityClientRecord對象獲取啟動activity的組件信息
2、通過mInstrumentation對象的newActivity方法調用classloader完成activity的創建
3、通過r.packageInfo(LoadedApk 對象)的makeApplication方法嘗試創建Application對象
4、創建ContextImpl對象並調用Activity的attach方法完成一些數據的初始化
5、調用Activity的onCreate方法

在Activity啟動的過程中,App進程會頻繁地與AMS進程進行通信:

App進程會委託AMS進程完成Activity生命周期的管理以及任務棧的管理;這個通信過程AMS是Server端,App進程通過持有AMS的client代理IActivityManager完成通信過程;
AMS進程完成生命周期管理以及任務棧管理後,會把控制權交給App進程,讓App進程完成Activity類對象的創建,以及生命周期回調;這個通信過程也是通過Binder完成的,App所在server端的Binder對象存在於ActivityThread的內部類ApplicationThread;AMS所在client通過持有IApplicationThread的代理對象完成對於App進程的通信。

Service有兩種啟動方式,startService()和bindService(),兩種狀態可以並存:
startService流程

bindService流程

BroadcastReceiver的工作過程主要包括廣播的注冊、發送和接收:

動態注冊過程:

發送過程

靜態注冊是由PackageManagerService(PMS)在應用安裝的時候完成整個注冊過程的,除廣播以外,其他三大組件也都是在應用安裝時由PMS解析並注冊的。

每個進程的入口都是ActivityThead.main(),App的啟動流程如下:

從源碼中可以看出:
應用啟動的入口為ActivityThread的main方法,main方法會創建ActivityThread實例並創建主線程消息隊列。
attach方法中遠程調用AMS的attachApplication方法,並提供ApplicationThread用於和AMS的通信。
attachApplication方法會通過bindApplication方法和H來調回ActivityThread的handleBindApplication,這個方法會先創建Application,再載入ContentProvider,然後才會回調Application的onCreate方法。

由上圖可以看出,在ContentProvider的啟動過程中伴隨著app進程的啟動。

ContentProvider的其他CURD操作如insert,delete,update跟query的流程類似。

閱讀全文

與android的構成和工作流程相關的資料

熱點內容
找酒吧設計公司用什麼app 瀏覽:680
基本初等函數的導數公式及導數的運演算法則 瀏覽:915
為什麼小米app啟動廣告關不了 瀏覽:877
空調壓縮機一直不停 瀏覽:511
養殖系統開發源碼 瀏覽:82
pdf的目錄 瀏覽:406
光遇安卓如何一個人拍視頻 瀏覽:277
怨女pdf 瀏覽:708
扭曲伺服器什麼時候開 瀏覽:23
加密貨幣換平台 瀏覽:609
手機內存壓縮軟體 瀏覽:33
生成樹是否與遍歷演算法有關 瀏覽:728
python強化學習迷宮 瀏覽:450
老包子解壓視頻 瀏覽:885
伺服器注冊是什麼意思 瀏覽:418
程序員群體焦慮如何破局 瀏覽:585
程序員在廣州上班 瀏覽:803
androidlinuxadt 瀏覽:512
廣聯達軟體加密鎖原裝晶元 瀏覽:338
如何打開資料庫伺服器 瀏覽:312