Android SDK 1.5中文版 (Application基礎—1)

來源:互聯網
上載者:User

Android應用程式用Java做為開發語言。aapt工具把編譯後的Java代碼連同其它應用程式需要的資料和資源檔一起打包到一個Android檔案包中,這個檔案使用.apk做為副檔名,它是發布應用程式並安裝到行動裝置的媒介,使用者只需下載並安裝此檔案到他們的裝置即可。單個.apk檔案中的所有代碼被看作是一個應用程式。

從很多方面來看,每個Android應用程式都存在於它自己的世界之中:

  • 預設情況下,每個應用程式均運行於它自己的Linux進程中。當任一應用程式開始執行時,Android啟動一個進程,而當應用程式不再需要此進程而其它應用程式又需要系統資源時,則關閉這個進程。
  • 每個進程都運行於自己的Java虛擬機器(VM)中。所以應用程式代碼實際上與其它應用程式的代碼是隔離的。
  • 預設情況下,每個應用程式均被賦予一個唯一的Linux使用者ID,並加以使用權限設定,使得那個應用程式的檔案僅對這個使用者、這個應用程式可見。當然,也有其它的方法使得這些檔案同樣能被別的應用程式所訪問。

可以讓兩個應用程式共有同一個使用者ID,這種情況下他們可以看到彼此的檔案。為了保護系統資源,擁有同一個ID的應用程式將運行在同一個Linux進程,以及同一個虛擬機器之中。

1.1 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會確保那個組件的應用程式進程處於運行狀態,或在必要的時候啟動它。並確保那個相應組件的執行個體存在,必要時會建立那個執行個體。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.