Android是運行於Linux kernel之上,但並不是GNU /Linux。 因為在一般GNU/Linux 裡支援的功能,Android 大都沒有支援,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。 Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。 Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程式移到userspace,使得Linux driver 與Linux kernel徹底分開。 bionic/libc/kernel/ 並非標準的kernel header files。 Android 的kernel header 是利用工具由Linux kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。
開發者可以通過Android NDK(Android Native開發包)使用C語言或者C++語言來作為編程語言開發應用程式。
當前版本的NDK在功能上還有很多局限性:NDK並沒有提供對應用程式生命週期的維護;NDK也不提供對Android系統中大量系統事件的支持;對於作為應用程式交互介面的UI API ,當前版本的NDK中也沒有提供。 但是相對於初版的NDK,現在的NDK已經進行了許多重大的功能改進。
Android採用OpenCORE作為基礎多媒體框架。 OpenCORE可分7大塊:PVPlayer、PVAuthor、 Codec 、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
目前Skia 也是Google Chrome 的圖形引擎。
技術內容:本系統主要由四個部分組成,分別是:活動(Activity): 用於表現功能。 服務(Service): 相當於後台運行的Activity。 廣播接收器(BroadcastReceiver):用於接收廣播。 意圖(Intent): 用於連接以上各個組件,並在其間傳遞消息。
1 Activity
Android 中,Activity 是所有程式的根本,所有程式的流程都運行在Activity 之中,Activity可以算是開發者遇到的最頻繁,也是Android 當中最基本的模塊之一。 在Android的程式當中,Activity 一般代表手機螢幕的一屏。 如果把手機比作一個瀏覽器,那麼Acitivity就相當於一個網頁。 在Activity 當中可以添加一些Button、Check box 等控制項。 可以看到Activity 概念和網頁的概念相當類似。
一般一個Android 應用是由多個Activity 組成的。 這多個Activity 之間可以進行相互跳轉,例如,按下一個Button 按鈕後,可能會跳轉到其他的Activity。 和網頁跳轉稍微有些不一樣的是,Activity 之間的跳轉有可能返回值,例如,從Activity A 跳轉到Activity B,那麼當Activity B 運行結束的時候,有可能會給Activity A 一個返回值。 這樣做在很多時候是相當方便的。
當打開一個新的螢幕時,之前一個螢幕會被置為暫停狀態,並且壓入歷史堆棧中。 用戶可以通過回退操作返回到以前打開過的螢幕。 我們可以選擇性的移除一些沒有必要保留的螢幕,因為Android 會把每個應用的開始到當前的每一個螢幕保存在堆棧中。 Activity 是由Android 系統進行維護的,它也有自己的生命週期,即它的一個產生、運行、銷毀的一個週期,對於Activity,關鍵是其生命週期的把握,其次就是狀態的保存和恢復(onSaveInstanceState onRestoreInstanceState ),以及Activity 之間的跳轉和數據傳輸(intent)。
2 Service
Service 是android 系統中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能後台運行,並且可以和其他組件進行交互。 Service 是沒有介面的長生命週期的代碼。 Service 是一種程式,它可以運行很長時間,但是它卻沒有用戶介面。 這麼說有點枯燥,我們來看個例子。 打開一個音樂播放機的程式,這個時候若想上網了,那麼,我們打開Android 瀏覽器,這個時候雖然我們已經進入了瀏覽器這個程式,但是,歌曲播放並沒有停止,而是在後台繼續一首接著一首的播放。 其實這個播放就是由播放音樂的Service進行控制。 當然這個播放音樂的Service也可以停止,例如,當播放清單裡邊的歌曲都結束,或者用戶按下了停止音樂播放的快捷鍵等。 service 可以在和多場合的應用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD 卡上檔的變化,再或者在後台記錄你地理資訊位置的改變等等,總之服務嘛,總是藏在後頭的。
3 Broadcast
在Android 中,Broadcast 是一種廣泛運用的在應用程式之間傳輸資訊的機制。 而BroadcastReceiver 是對發送出來的Broadcast進行過濾接受並響應的一類組件。 可以使用BroadcastReceiver 來讓應用對一個外部的事件做出響應。 這是非常有意思的,例如,當電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進行處理。 例如,當下載一個程式成功完成的時候,仍然可以利用BroadcastReceiver 進行處理。 BroadcastReceiver不能生成UI,也就是說對於用戶來說不是透明的,用戶是看不到的。 BroadcastReceiver通過NotificationManager 來通知用戶這些事情發生了。 BroadcastReceiver 既可以在AndroidManifest.xml 中註冊,也可以在運行時的代碼中使用Context.registerReceiver()進行註冊。 只要是註冊了,當事件來臨的時候,即使程式沒有啟動,系統也在需要的時候啟動程式。 各種應用還可以通過使用Context.sendBroadcast () 將它們自己的intent broadcasts廣播給其他應用程式。 註冊BroadcastReceiver有兩種方式:
4 Intent
Intent 是一個將要執行的動作的抽象的描述,一般來說是作為參數來使用,由Intent來協助完成android 各個組件之間的通訊。 Intent 負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android 則根據此Intent 的描述,負責找到對應的組件,將Intent 傳遞給調用的組件,並完成組件的調用。 因此,Intent 在這裡起著一個媒體仲介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。 例如,在一個聯繫人維護的應用中,當我們在一個聯繫人清單螢幕(假設對應的Activity 為listActivity)上,點擊某個聯繫人後,希望能夠跳出此聯繫人的詳細資訊螢幕(假設對應的Activity為detailActivity)。 為了實現這個目的,listActivity需要構造一個Intent,這個Intent 用於告訴系統,我們要做"查看"動作,此動作對應的查看對像是"某聯繫人",然後調用startActivity(Intent intent),將構造的Intent 傳入,系統會根據此Intent 中的描述,到ManiFest中找到滿足此Intent 要求的Activity,系統會調用找到的Activity,即為detailActivity,最終傳入Intent,detailActivity 則會根據此Intent中的描述,執行相應的操作。 Intent主要是用來啟動其他的activity或者service ,所以可以將intent理解成activity之間的粘合劑。
Intent具體有一下3 種形式:
通過startActivity 方法來啟動一個新的Activity;
通過broadcast Intent 機制可以將一個Intent 發送給任何對這個Intent 感興趣的BroadcastReceiver;
通過startService (Intent) 或bindService(Intent,ServiceConnection,int) 來和後台的Service 進行交互。
http://translate.google.com/translate?hl=zh-TW&sl=zh-CN&u=http://baike.baidu.com/view/1241829.htm&ei=nlBgT9ncNqeeiAekkbyKBQ&sa=X&oi=translate&ct=result&resnum=1&ved=0CDwQ7gEwAA&prev=/search%3Fq%3DAndroid%2B%25E7%259A%2584%25E4%25BB%258B%25E7%25B4%25B9%26hl%3Dzh-TW%26biw%3D1440%26bih%3D705%26prmd%3Dimvnsa