Android基礎(一):四大元件與另一個重要元件Intent的簡單認識
與其他系統應用程式不同,Android應用程式沒有為應用程式提供一個單獨的應用程式入口(如同沒有mian方法)而是為系統依照需求例項化提供了基本的元件,這就是我之後要講到的Android的四大元件和另一個重要元件。
一、四大元件:
Activity(活動)元件——為使用者操作而展示的視覺化介面的元件
Activity是一個視覺化介面,就拿我們手機最常用的QQ應用程式來說,有檢視訊息的介面,有聯絡人介面,有動態介面等等,儘管這些介面一起組成一個內聚的使用者介面,但是每個Activity都是與其他的Activity保持的獨立關係,每個都是以Activity類為基類的子類實現。
一個應用程式可以只有一個Activity也可以有多個Activity,每一個Activity的作用以及個數都是有應用程式和其設計所決定的。一般情況下,總有一個應用程式被標記為使用者在應用程式啟動的時候第一個看到的(如QQ的訊息介面)。從一個activity 轉向另一個的方式是靠當前的activity啟動
每個activity 都被給予一個預設的視窗進行繪製。一般情況下,這個視窗是滿屏的,但它也可以是一個
小的位於其它視窗之上的浮動視窗。視窗顯示的可視內容是由一系列檢視構成的,這些檢視均繼承自View 基類。。每個檢視均控制著視窗中一塊特定的矩形空間。父級檢視包含並組織它子檢視的佈局。葉節點檢視(位於檢視層次最底端)在它們控制的矩形中進行繪製,並對使用者對其直接操作做出響應。所以,檢視是activity 與使用者進行互動的介面。
Service(服務)元件——無視覺化介面,在一段時間在後臺執行的元件
無視覺化的使用者介面,而是在一段時間內在後臺執行。這個與我們電腦裡的工作管理員中的服務是一回事的,而在Android應用程式中我們最常見的是在後臺播放歌曲中。每個服務都繼承自Service 基類
你可以連線至(繫結)一個正在執行的服務(如果服務沒有執行,則啟動之)。連線之後,你可以通過那個服務暴露出來的介面與服務進行通訊。對於音樂服務來說,這個介面可以允許使用者暫停、回退、停止以及重新開放。
如同activity 和其它元件一樣,服務運行於應用程式程序的主執行緒內。所以它不會對其它元件或使用者介面有任何干擾,它們一般會派生一個新執行緒來進行一些耗時任務(比如音樂回放)。
BroadcastReceiver(廣播接收器)元件——一個專注於接收廣播通知資訊,並做出對應處理的元件
廣播接收器是一個專注於接收廣播通知資訊,並做出對應處理的元件。很多廣播是源自於系統程式碼的──比如,通知時區改變、電池電量低、拍攝了一張照片或者使用者改變了語言選項。應用程式也可以進行廣播──比如說,通知其它應用程式一些資料下載完成並處於可用狀態。應用程式可以擁有任意數量的廣播接收器以對所有它感興趣的通知資訊予以響應。所有的接收器均繼承自BroadcastReceiver 基類。
廣播接收器沒有使用者介面。然而,它們可以啟動一個activity 來響應它們收到的資訊,或者用NotificationManager 來通知使用者。通知可以用很多種方式來吸引使用者的注意力──閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。
ContentProvider(內容提供者)元件——將一些特定的應用程式資料供給其它應用程式使用的元件
內容提供者將一些特定的應用程式資料供給其它應用程式使用。資料可以儲存於檔案系統、SQLite 資料庫或其它方式。內容提供者繼承於ContentProvider 基類,為其它應用程式取用和儲存它管理的資料實現了一套標準方法。然而,應用程式並不直接呼叫這些方法,而是使用一個ContentResolver 物件,呼叫它的方法作為替代。
ContentResolver 可以與任意內容提供者進行會話,與其合作來對所有相關互動通訊進行管理。
二、另一個重要元件:
Intent(啟用)元件——內容提供者被啟用後將其他三種元件啟用的元件
當接收到ContentResolver 發出的請求後,內容提供者被啟用。而其它三種元件──activity、服務和廣播接收器被一種叫做intent 的非同步訊息所啟用。intent 是一個儲存著訊息內容的Intent 物件。對於activity 和服務來說,它指明瞭請求的操作名稱以及作為操作物件的資料的URI (統一資源識別符號)和其它一些資訊。比如說,它可以承載對一個activity 的請求,讓它為使用者顯示一張圖片,或者讓使用者編輯一些文字。而對於廣播接收器而言,Intent 物件指明瞭宣告的行為。比如,它可以對所有感興趣的物件宣告照相按鈕被按下。
三、Intent對每個元件的啟用方法
1、Intent啟用Activity的方法
通過傳遞一個Intent 物件至Context.startActivity()或Activity.startActivityForResult()以載入(或指定新工作給)一個activity。相應的activity 可以通過呼叫getIntent() 方法來檢視啟用它的intent。Android 通過呼叫activity 的onNewIntent()方法來傳遞給它繼發的intent。
一個activity 經常啟動了下一個。如果它期望它所啟動的那個activity 返回一個結果,它會以呼叫
startActivityForResult()來取代startActivity()。比如說,如果它啟動了另外一個activity 以使使用者挑選一張照片,它也許想知道哪張照片被選中了。結果將會被封裝在一個Intent 物件中,並傳遞給發出呼叫的activity 的onActivityResult() 方法。
2、Intent啟用service的方法
通過傳遞一個Intent 物件至Context.startService()將啟動一個服務(或給予正在執行的服務以一個新的指令)。Android 呼叫服務的onStart()方法並將Intent 物件傳遞給它。
與此類似,一個Intent 可以被呼叫元件傳遞給Context.bindService()以獲取一個正在執行的目標服務的連線。這個服務會經由onBind() 方法的呼叫獲取這個Intent 物件(如果服務尚未啟動,bindService()會先啟動它)。比如說,一個activity 可以連線至前述的音樂回放服務,並提供給使用者一個可操作的(使用者介面)以對回放進行控制。這個activity 可以呼叫bindService() 來建立連線,然後呼叫服務中定義的物件來影響回放。
3、Intent啟用BroadcastReceiver的方法
應用程式可以憑藉將Intent 物件傳遞給Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其它類似方法來產生一個廣播。Android 會呼叫所有對此廣播有興趣的廣播接收器的onReceive()方法,將intent 傳遞給它們。