android API Guides學習--Introduction(2)

 

應用程序基本原理:java

android應用程序是用java語言編寫的,android SDK工具在APK(Android package)裏編譯代碼(數據文件和資源文件)。apk是一個後綴爲.apk的檔案文件,1個apk文件包含了android應用程序的全部內容,apk是用來安裝應用程序的基於android的設備。一旦安裝了apk文件,每一個app運行在本身安全的沙盒中。android

  • android操做系統是一個多用戶的Linux操做系統,每個app有一個不一樣的用戶。數據庫

  • 系統默認給各自的app分配一個惟一的Linux用戶ID,ID只被系統使用,對於app來講,ID是個未知數。系統給全部app文件設置了權限,只有分配了用戶ID後,app才能夠運行。安全

  • 每一個進程有他們本身的虛擬機,所以app運行時是與其餘app隔離的。網絡

  • 全部app運行須要他們本身的Linux進程。當一些app的組件須要被執行時,就運行他們各自的進程。當再也不須要組件或須要給他app釋放內存時,關閉進程app

用這種方法,每一個app實現最小特權原則——默認狀況下,每一個app只能訪問到它的工做所須要的最少的權限。這將建立一個很是安全的環境:每個應用程序不能訪問系統沒有給予它權限的任何一個部分。框架

可是,還有一些方法可讓app與其餘app分享數據,或者使用系統資源。ide

  • 給兩個app共享同一個Linux用戶ID是可能的,在這種狀況下,他們能夠訪問彼此的文件。爲了節省系統資源,使用同一個用戶ID的app能夠在同一個Linux進程中運行並分享同一個虛擬機(應用程序也必須使用相同的證書籤名)工具

  • app能夠請求權限使用設備數據,好比用戶的聯繫人,短信羣發,SD 卡,照相機,藍牙等等,全部app權限在安裝時授予優化

前面內容包含了關於app如何存在於系統內部的基礎知識,剩下的內容給你介紹

  • 定義app核心框架組件

  • 在app的Manifest文件中聲明組件與設備功能。

  • 資源是獨立於應用程序代碼的,讓你的應用程序,以優雅地行爲爲各類設備優化配置。

app組件:

app組件是全部app的基本要素,每個組件都是系統進入app的不一樣經過點,對於用戶來講,並非每個組件都是app真正的入口點,一些組件取決於他們本身。每個組件都以他們的實體存在,他們各自都有獨特的功能,扮演着特殊的角色。每個都是一個能夠幫助肯定您的應用程序的總體。

一共有四種不一樣類型的組件,每一個類型都服務於不一樣用途,而且有他們獨特的如何被建立與銷燬的生命週期。

Activities:

activity表示一種用戶界面的屏幕,例如:一個e-mail app也許會有一個activity顯示接收到的新e-mail列表,另外一個activity寫e-mail,還有一個activity讀e-mail。儘管在e-mail app中全部activity一塊兒工做造成有力的用戶體驗,可是每個activity對於其餘activity來講式獨立的。一樣的,一個app在另外一個app容許後,能夠啓動另外一個app的activity。例如,一個照相機app爲了給其餘用戶分享照片能夠啓動e-mail app裏的activity來寫郵件。

一個activity實現了Activity的子類

Services:

service是一個在後臺運行的組件,他能夠執行長時間運行的操做,或者跨進程執行操做。一個service不會提供用戶界面。例如,一個service能夠在後臺播放音樂直到用戶使用另外一個不一樣的app,或者service能夠獲取數據但並不會阻塞用戶和界面交互。另外一個組件,例如activity,爲了和service互,activity能夠啓動一個service並讓他運行或者將service與activity綁定在一塊兒。

一個service實現了Service類的子類。

Content Providers:

content providers管理一套可分享的app數據,你能夠在網絡上,或者其餘的持久穩固你的app能夠存儲的位置,經過文件系統建立數據和SQLite數據庫。經過Content Providers,其餘的app能夠查詢數據,甚至在Content providers容許的狀況下修改數據。例如,android系統提供content provider管理鏈接信息。在適當的容許下,一個app能夠查詢content provider的數據(例如ContactsContract.Data)來讀取或者寫入有關我的說明的信息。

content providers 在讀取或者是寫入數據方面是有用的。這些數據對於你的app是私有的,不能分享的 。

content providers實現了ContentProvider的子類。而且爲了使app操做事務,必須實現了標準的API集合。                                    Broadcast receivers:

broadcast receivers是一個響應全系統廣播公告的組件。一些廣播是由系統發佈的,好比屏幕關閉,電量低,圖片被捕獲。app也能夠發佈廣播,好比,讓其餘app知道數據已經被下載在設備上而且其餘app可使用這些有效的數據。儘管broadcast receivers並不顯示用戶界面,可是他們能夠建立一個狀態欄通知,當廣播事件發生時能夠提醒用戶。更常見的是,對其餘組件來講broadcast receivers僅僅是一個網關,而且broadcast只打算作少許的工做。好比,啓動一個service執行這個事件最基本的工做。

broadcast receivers實現了Broadcast receiver子類,而且每個廣播都提供intent類。

android系統設計特殊的一方面就是一些app能夠啓動其餘app的組件。例如,若是你想用設備照相機捕獲一張照片,也許有另一個app實現了這個功能,你的app能夠直接使用它,而不是你本身開發一個activity去實現捕獲照片。你並不須要從照相機app中鏈接代碼,你僅僅須要啓動照相機app中的activity捕獲照片。當完成後,圖片能夠返回給app供你使用。對於用戶來講,照相機彷佛是你app的一部分。

 當系統啓動一個組件時,啓動一個組件所須要的此app的進程以及實例化一個類。例如,若是你的app啓動照相機app中捕獲照片的activity,屬於照相機app的activity在進程中運行,而不是在你的app進程中運行。所以,和大部分其餘系統的app不一樣,android app並無惟一的一個入口(例如,沒有main()方法)

因爲每一個應用程序運行在獨立於其它應用程序文件權限的系統中,你的應用程序不能直接從另外一個程序激活一個組件,可是android系統能夠。所以爲了在另外一個android系統中激活組件,你經過發送一個信息給系統來指定你的intent啓動另外一個app,而後系統給你激活一個組件。

 

翻譯自android 官網API Guide。

相關文章
相關標籤/搜索