編輯:高級開發
android應用程序開發簡介
android應用程序用Java做為開發語言。aapt工具把編譯後的Java代碼連同其它應用程序需要的數據和資源文件一起打包到一個android文件包中,這個文件使用.apk做為擴展名,它是發布應用程序並安裝到移動設備的媒介,用戶只需下載並安裝此文件到他們的設備即可。單個.apk文件中的所有代碼被看作是一個應用程序。
從很多方面來看,每個android應用程序都存在於它自己的世界之中:
◆默認情況下,每個應用程序均運行於它自己的Linux進程中。當任一應用程序開始執行時,android啟動一個進程,而當應用程序不再需要此進程而其它應用程序又需要系統資源時,則關閉這個進程。
◆每個進程都運行於自己的Java虛擬機(VM)中。所以應用程序代碼實際上與其它應用程序的代碼是隔離的。
◆默認情況下,每個應用程序均被賦予一個唯一的Linux用戶ID,並加以權限設置,使得那個應用程序的文件僅對這個用戶、這個應用程序可見。當然,也有其它的方法使得這些文件同樣能被別的應用程序所訪問。
可以讓兩個應用程序共有同一個用戶ID,這種情況下他們可以看到彼此的文件。為了保護系統資源,擁有同一個ID的應用程序將運行在同一個Linux進程,以及同一個虛擬機之中。
android應用程序開發的核心:Application組件
android的核心功能之一就是一個應用程序可以使用其它應用程序的元素(如果那個應用程序允許的話)。比如說,如果你的應用程序需要一個圖片滾動列表,而另一個應用程序已經開發了一個合適、而且又允許別人使用的相同列表,可以直接調用那個滾動列表來實現功能,而不用自己再開發一個。而應用程序並沒有包含或鏈接其它應用程序的代碼,它只是在需要時啟用了其它應用程序的那部分功能而已。
為達到這個目的,系統必須在一個應用程序的一部分需要時啟動這個應用程序,並將那部分的Java對象實例化。與其它系統上的應用程序不同,android應用程序沒有為應用程序提供單獨的程序入口(比如說,沒有main()方法), 相反,而是提供了一些核心組件,系統可以在需要時實例化,運行這些組件。共有四種組件類型:
Activity(活動)
Activity是為響應用戶操作而展示的可視化用戶界面。比如說,一個Activity可以展示一個菜單項列表供用戶選擇,或者顯示一些包含說明的照片。一個短消息應用程序可以包括一個用於顯示做為發送對象的聯系人列表的Activity,一個給選定的聯系人寫短信的Activity以及翻閱以前的短信和改變設置的Activity。盡管它們一起寫作完成了一個完整的用戶界面,但每個Activity都與其它的Activity保持獨立。都是通過以Activity類為基類的子類實現。
一個應用程序可以只有一個Activity,或者,如剛才提到的短信應用程序那樣包含多個。每個Activity的作用,以及其數目,自然取決於應用程序及其設計。通常,其中一個Activity被標記啟動Activity,用戶在應用程序啟動的時候首先看到該Activity的內容。用當前Activity啟動一個新的Activity即可轉向其他的Activity。
每個Activity都被給予一個默認的窗口以進行繪制。通常,這個窗口是滿屏的,但它也可以是一個小的位於其它窗口之上的浮動窗口。Activity也可以使用額外的窗口——比如,在Activity運行過程中彈出一個需用戶反應的小對話框,或是當用戶選擇了屏幕上特定項目後彈出的重要信息窗口。
窗口顯示的可視內容是由一系列視圖構成的,這些視圖均繼承自VIEw基類。每個視圖均控制著窗口中一塊特定的矩形空間。父級視圖包含並組織它的子視圖的布局。葉節點視圖(位於視圖層次最底端)在它們控制的矩形中進行繪制,並對用戶對其實施的操作做出響應。所以,視圖是Activity與用戶進行交互的界面。比如說,視圖可以顯示一個小圖片,並在用戶指點它的時候產生行為。android有很多既定的視圖供用戶直接使用,包括按鈕、文本域、滾動條、菜單項、復選框等等。
視圖及其層次是由Activity.setContentView()方法放入Activity的窗口之中。內容視圖(Content VIEw)是位於視圖層次根位置的視圖對象。(參考用戶界面章節的內容獲取關於視圖及其層次的更多信息。)
Service(服務)
服務沒有可視化的用戶界面,而是在一段時間內在後台運行。比如說,一個服務可以在用戶做其它事情的時候在後台播放背景音樂、從網絡獲取一些數據或者計算一些東西並提供給需要這個運算結果的Activity使用。每個服務都繼承自Service基類。
媒體播放器播放播放列表中的曲目是一個不錯的例子。播放器應用程序可能有一個或多個Activity來給用戶選擇歌曲並進行播放。然而,音樂播放這個任務本身不應該為任何Activity所處理,因為用戶期望在他們離開播放器應用程序而開始做別的事情時,音樂仍在繼續播放。為達到這個目的,媒體播放器Activity應該啟用一個運行於後台的服務。而系統將在這個Activity不再顯示在屏幕之後,仍維持音樂播放服務的運行。我們可以連接(綁定)至一個正在運行的服務(如果服務沒有運行,則啟動)。連接之後,可以通過那個服務暴露出來的接口與服務進行通訊。對於音樂服務來說,這個接口可以允許用戶暫停、回退、停止以及重新開始播放。
如同Activity和其它組件一樣,服務運行於應用程序進程的主線程內。所以它不會對其它組件或用戶界面有任何干擾,它們一般會派生一個新線程來進行一些耗時任務(比如音樂回放)。參見下述進程和線程。
Broadcast(廣播接收器)
廣播接收器是一個專注於接收廣播通知信息,並做出對應處理的組件。很多廣播是源自於系統代碼——比如,通知時區改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應用程序也可以進行廣播——比如說,通知其它應用程序一些數據下載完成並處於可用狀態。
應用程序可以擁有任意數量的廣播接收器以對其所有感興趣的通知信息予以響應。所有的接收器均繼承自BroadcastReceiver基類。
廣播接收器本身不顯示用戶界面。但它可以啟動一個Activity來響應收到的信息,或者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態欄上放一個持久(Persistent)的圖標,用戶可以打開它並獲取消息。
ContentProvider(內容提供者)
內容提供者將一些特定的應用程序數據提供給其它應用程序使用。數據可以存儲於文件系統、SQLite數據庫或其它方式。內容提供者繼承於ContentProvider 基類,為其它應用程序讀取和存儲它管理的數據實現了一套標准方法。然而,應用程序並不直接調用這些方法,而是使用一個 ContentResolver 對象,調用它的方法。ContentResolver可以與任意的內容提供者進行會話,與Provider合作來管理其涉及的所有相關交互通訊。
每當出現一個需要被特定組件處理的請求時,android會確保那個組件的應用程序進程處於運行狀態,或在必要的時候啟動它。並確保那個相應組件的實例存在,必要時會創建那個實例。
以上就介紹了android應用程序開發的一些基礎。本文來自賴儀靈的博客:《android SDK 1.5中文版 (Application基礎—1)》。
為什麼要推出android J2ME程序?是什麼讓這些用戶喜歡谷歌推出的這款操作系統,有的人說可以媲美iPhone?這些問題對於欲了解android平台智能手機,和想了
Andrew Koenig也寫了一本現代android操作系統教程《Accelerated C++》,然而這麼多年來,android操作系統的狀況改善了嗎?androi
事件是一種有用來收集用戶與應用程序互動數據的互動組件,如按鍵或觸摸屏等放置事件,因為每個事件從Android框架維護事件隊列先入先出(FIFO)基礎上的隊列。可以在程序中
android手機將成為谷歌手機主導的開發手機平台,最終將成為android平台的主要發展的有一大成員,這對於諾基亞的SymBian和微軟的mobile帶來了不少的壓力