歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 重要的組件

Android 重要的組件

日期:2017/3/1 11:08:57   编辑:Linux編程

  在Android中,一個應用程序可以使 用其它應用程序的組件,這是Android系統一個非常重要的特性.例如,你編寫的應用程序需要顯示一個可以滾動的圖片列表,如果其它某個應用程序已經開 發了具有此功能的組件並對外發布了此組件以使其它應用程序能夠使用此組件,因此你可以直接調用這個組件來顯示圖片,而不需要重新開發一個具有此功能的組 件.在需要的時候Android會啟動另外一個程序的部分代碼,這部分代碼實現了你請求執行的動作的功能,而不是在你的應用程序中直接包含另外一個應用程 序的代碼.

  為了實現這樣的功能,Android系統必須能夠在其它應用程序有請求的時候啟動一個應用程序進程並實例化部分java對象.因此與其它大部分系統 不同,運行在Android系統上的應用程序並沒有一個應用程序入口點(類似java程序中的main方法).相反,Android應用程序包含一些運行 應用程序所必須的能夠被Android系統實例化的組件.這些組件主要包括以下四種類型.

  Activity

  一個Activity通常展現為一個可視化的用戶界面.例如,一個activity可能展現為一個用戶可以選擇的菜單項列表或者展現一些圖片以及圖 片的標題.一個消息服務應用程序可能包含一個顯示聯系人列表的activity,一個編寫信息的activity,以及其它一些查看信息和修改應用程序設 置的activity.雖然這些activity一起工作,共同組成了一個應用程序,但每一個activity都是相對獨立的.每一個activity都 是Activity(android.app.Activity)的子類.

  一個應用程序可能只包含一個activity,或者像上面提到的消息服務程序一樣有多個activity.一個應用程序包含幾個activity以 及各個activity完成什麼樣的功能完全取決於應用程序以及它的設計.通常每個應用程序都包含一個在應用程序啟動後第一個展現給用戶的 activity.在當前展現給用戶的activity中啟動一個新的activity,可以實現從一個activity轉換到另外一個 activity.

  每個activity都會有一個用於繪制用戶界面的窗口.通常這樣一個窗口會填充整個屏幕,當然這個窗口也可以比屏幕小並漂浮在其他窗口之上. activity還可以使用一些額外的窗口,例如一個要求用戶響應的彈出式對話框,或者是當用戶在屏幕上選擇一個條目後向用戶展現一些重要信息的窗口.

  展示activity窗口的可視化內容區域是一些具有層次關系(很像數據結構中的樹)的視圖,而視圖則是由類View的子類表示的.每個視圖控制窗 口中的一個矩形區域.父視圖包含一些子視圖並管理子視圖的布局.位於葉節點的視圖直接控制並響應用戶的動作.因此視圖就是activity與用戶交互的接 口.例如,一個顯示圖片的視圖,當用戶單擊的時候它可能會啟動一個動作.Android有許多開發人員可以直接使用的視圖,包括按鈕,文本域,滾動條,菜 單,復選框等.

  通過調用Activity.setContentView()方法來設置展現activity的窗口的視圖.內容視圖則是視圖層次結構中的根節點視圖.

  Service

  service沒有用戶界面,但它會在後台一直運行.例如,service可能在用戶處理其它事情的時候播放背景音樂,或者從網絡上獲取數據,或者執行一些運算,並把運算結構提供給activity展示給用戶.每個service都擴展自類Serivce.

  多媒體播放器播放音樂是應用service的一個非常好的例子.多媒體播放器程序可能含有一個或多個activity,用戶通過這些 activity選擇並播放音樂.然而,音樂回放並不需要一個activity來處理,因為用戶可能會希望音樂一直播放下去,即使退出了播放器去執行其它 程序.為了讓音樂一直播放,多媒體播放器activity可能會啟動一個service在後台播放音樂.Android系統會使音樂回放service一 直運行,即使在啟動這個service的activity退出之後.

  應用程序可以連接到一個正在運行中的service.當連接到一個service後,可以使用這個service向外暴露的接口與這個service進行通信.對於上面提到的播放音樂的service,這個接口可能允許用戶暫停,停止或重新播放音樂.

  與activity以及其它組件一樣,service同樣運行在應用程序進程的主線程中.所以它們不能阻塞其它組件或用戶界面,通常需要為這些service派生一個線程執行耗時的任務.

Copyright © Linux教程網 All Rights Reserved