應用程序基礎之02-應用程序組件篇(二)

應用程序基礎之02-應用程序組件篇(二)


Android系統設計的一個獨一無二的方面是任何一個應用都可以啓動其他應用中的組件。例如,如果你想讓用戶使用設備的相機拍攝一張圖片,可能有其他應用已經完成了此項功能,那麼你的應用就可以直接使用此功能,而不用自己再次開發一個activity去拍攝圖片。你的應用中不需要包含甚至不需要連接相機應用中的代碼。反而,你可以簡單地啓動相機應用的一個activity組件來拍攝圖片。拍攝完成之後,圖片甚至可以返回給你的應用,因此你可以使用它。對於用戶來說,看起來相機好像是你的應用的一部分。


當系統啓動一個組件時,它實際上爲該應用(如果該應用並非在運行中)啓動了一個進程,並且實例化組件需要的所有類。例如,如果你的應用啓動相機應用的一個activity來拍攝照片,該activity是運行在相機應用的進程中而並非你的應用進程。因此,不像大多數其他系統的應用一樣,Android系統應用程序沒有單獨的入口點(例如沒有main()函數)。

因爲系統在單獨的進程中運行每一個應用程序,而這些進程帶有文件權限,嚴格限制了對其他應用程序的訪問,因此你的應用不能直接激活其他應用程序中的組件。但是Android系統當然是可以激活應用程序中的組件的,所以你必須向系統發送一條消息指定你的intent來啓動特定的組件。這樣系統便可以爲你激活所需的組件了。

激活組件(Activiting Components)
四種組件類型中的三個——activitys、services和broadcastreceivers,都是被一個叫做intent的異步消息激活的。在運行時,intents將單個的組件與其他組件綁定,不管組件是屬於你的應用還是屬於其他的應用(你可以把intents想象成信使,用於請求其他組件的動作)。

一個intent作爲一個Intent類的對象被創建,intent定義消息來激活某個特定的組件或者一類特定的組件。一個intent可以是顯式的也可以是隱式的。

對於activity和service,一個intent定義了一個要執行的動作(例如,讓“view”或者“send”些什麼),也可能指定了要操作的URI類型的數據(其中有一些在其他組件啓動的時候是需要用到的)。例如,一個intent會給一個activity傳達一個請求去顯式一個圖片或者打開一個web頁面。在某些情況下,你也可以通過啓動一個activity來接受結果,這種情況下,activity將通過intent返回結果(例如,你可以指派一個intent爲用戶獲取個人的聯繫信息,然後讓它返回給你——返回的intent包含一個指向選定的聯繫信息的URI)。

對於broadcast receivers,intent簡單地定義了被廣播的公告(例如,一個要指出設備電量過低的廣播僅僅包含了一個動作字符串,表示“電量過低”)。

最後一個組件類型content
provider並不被intent激活。準確的說,它是在被作爲ContentResolver的請求對象時被激活的。content
resolver處理所有與content
provider之間的直接交互,因此這個組件執行和提供者(provider)之間的交互,並不需要。。。。
(略)

下面是激活每個類型組件的方法:

*你可以通過傳遞一個intent參數給startActivity()或者startActivityForResult()方法(當你期望activity返回結果時)來啓動一個activity(或者讓已經存在的activity做一些新的事情)。

*你可以通過傳遞一份intent參數給startService()來啓動一個service(或者給正在運行中的service一些新的指令)。你還可以通過傳遞一個intent給bindService()來綁定一個service。

*你可以通過傳遞一個intent給sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()這樣的方法來初始化一個廣播。

*你可以調用ContentResover類的query()方法來對content provider進行查詢。

關於使用intent的更加詳細的信息請查看Intents and Intent Fiters文檔。

更多關於激活特定組件的信息也會在後邊Activities,Services,BroadcastReceiver and Content Providers文檔中提供。


轉發請註明:大飛_Rflyee:http://blog.csdn.net/rflyee/article/details/14046561


發佈了57 篇原創文章 · 獲贊 86 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章