@ 每個繼承擁有自己的虛擬機,所以程序間的運行是互相隔離的。
@ 默認情況下,每個應用程序都會分到一個特殊的Linux用戶ID,并被設置權限,只對應用程序自己可見和使用,當然可以對其他程序開放。
可以安排兩個程序共享一個UserID,這樣他們可以互相看到對方的文件,共享系統(tǒng)資源,并且在同一個Linux線程里運行,共享虛擬機。
Android的一個核心特點就是一個應用程序可以由其他應用程序的組件來組成(在其他程序允許的前提下)。例如:如果你的程序需要顯示一個圖片列表并且另一個程序已經(jīng)開發(fā)了合適的滾動條且允許其 他應用程序添加,那么你可以在他的滾動條基礎上開發(fā),比自己開發(fā)要方便的多。你的程序不需要合并他的代碼只需要一個連接即可。相比之下,當我需要某個程序然后可以啟動他時是最簡單的。
想要這樣的話,當這個程序的某一部分被別人用到時,系統(tǒng)必須能都啟動一個應用程序的進程,并且實例化這些相關的Java對象,因此,與其他系統(tǒng)的應用程序不同的是,android程序沒有一個單一的入 口程序(例如main方法),相比下,android有四種基本的組件可以被系統(tǒng)實例化、啟動。包括:Activities、Services、Broadcast receivers、Content providers。
Activity提供了一個可視化的用戶接口,例如:一個activity可以提供一個列表,供用戶選擇,或者在拍照時顯示照片列表。一個短信程序有一個activity顯示聯(lián)系人列表,另一個activity可以寫短信 并且選擇聯(lián)系人發(fā)送,別的activity可以查看以往的短信內容并且更改設置。這幾個activity共同在一個用戶界面里發(fā)揮著作用,他們之間互相依賴,每一個都是繼承自activity基類的子類。
一個應用程序可以包含一個或者多個activity,例如剛提到的短信程序。需要多少就可以包含多少。通常,被標記的第一個activity先運行。當前activity啟動完就啟動下一個。
每個activity都被分配一個默認的窗口來繪制。通常是全屏,也可以比屏幕小或者浮在其他窗口上。一個activity可以利用額外的窗口,例如:在activity里探出一個讓用戶想用的彈出對話框,或者顯 示一個給用戶顯示重要信息供用戶選擇的特殊選項。
窗口的可視內容由層式結構的view來顯示,他們繼承自view基類。每個view控制一個特定矩形空間內的窗口。父view控制并且組織子view 的顯示。子view(上層的view)被繪制在矩形里響應用戶的操作 ,從而與用戶交互信息。例如可以顯示一副小圖片用戶點擊圖片時響應一個事件。Android有很多現(xiàn)成的view可以被直接使用,包括按鈕、文本框、滾動條、菜單、選擇框等等。
通過Activity.setContentView()可以改變activity的顯示,content view 是根視圖。
servers沒有用戶接界面,但它確實在后臺不定期的運行著。例如:但用戶處理其他事情時,一個service可以背景播放音樂、后臺讀取網(wǎng)絡數(shù)據(jù)或者處理其他的東西并且提供給其他的activity,每一個 servers都繼承自Service基類。
一個最好的例子就是媒體播放器。播放器大概需要一個或多個activity來允許用戶選擇歌曲并且播放。然而,播放器不必是當前
活動的activity,用戶可能在播放時做別的事情。播放器需要啟動一個后 臺來持續(xù)播放音樂。系統(tǒng)會一直播放這個播放器service甚至當他隱藏時。
我們可以鏈接到一個正在運行的service,或者啟動一個沒有運行的service,當連接成功時,你可以和service的進程通信。例如播放器,用戶可以控制他的開始暫停重放等功能。
像activity和其他的組件一樣,services運行在主線程。所以不會阻塞其他的組件或者用戶界面。他們往往啟動一個新的任務??蓞⒖糚rocess and Threads。
Broadcast receiver這個組件只是接受receive和響應Broadcast廣播通知。很多廣播來源系統(tǒng)代碼,例如通知時區(qū)已經(jīng)改變、低電量、圖片被選中、用戶改變了語言設置,此時用戶開始廣播,例如,同 事其他應用程序網(wǎng)絡數(shù)據(jù)已經(jīng)下載ok可以使用了。
一個Broadcast receiver 可以響應多個廣播,所有的Broadcast receiver 都繼承自BroadcastReceiver基類。
Broadcast receivers 沒有用戶界面。然而,他們可以在接收到消息啟動一個activity,或者使用notificationManager 去提醒用戶。Notifications 可以通過一些方式引起用戶注意:閃動背光、 震動、發(fā)聲等等。通常在狀態(tài)欄顯示一個提示圖標讓用戶可以查看。
Content providers為其他程序提供數(shù)據(jù)集,這些數(shù)據(jù)可以保存在系統(tǒng)文件里或者sqlite數(shù)據(jù)庫里,Content providers繼承自 ContentProvider基類,實現(xiàn)了一些標準的方法,可以 讓程序檢索或者改寫其中的數(shù)據(jù)。程序不能直接的調用那些方法。ContentResolver不能與content provider直接通信,但可以用過ContentResolver 。ContentResolver 可以跟任何的content provider通信,可以與provider合作管理通 信進程。
更多信息查看Content Providers文檔。
當有需要特定的請求需要被處理時,Android都會確保他正在運行,需要時會創(chuàng)建一個實例。