編輯:Android開發教程
Android應用中的三個核心組件:Activities,Services和broadcast receivers都是通過稱為“Intent”的消息來激活的。 Android應用一個特點是“低耦合”,各個Activities,Services和broadcast receivers相當獨立,可以看成是一個個“迷你應 用”,而Intent是這些“迷你應用”的粘合劑,Intent不但可以用於同一個Application之間Activities,Services和broadcast receivers的交互,也可以用於不同Application之間Activities,Services和broadcast receivers的交互。
Intent本身為一 個數據載體,可以描述想要執行的操作以及用於這個操作的數據和其它屬性。用個容易理解的概念,在訪問網站時,我們需要提 供網站的URL,有時還需要通過URL參數,在Android世界裡,Intent 的功能類似於URL,Android操作系統根據Intent來觸發對於 的Activitives,Services或是Broadcast Receivers。
Android應用中的三個核心組件:Activities,Services和broadcast receivers都是通過Intent來觸發的,當它們觸發的機制各不相同,而且不會有重疊,也就是說發給Activity的Intent不會激活 Service或是broadcast receivers,發給broadcast receivers的Intent也不會觸發Activity和Service。
Activity 通過方法 Context.startActivity() 和 Activity.startActivityForResult()來調用。以函數調用為參考 startActivity() 相當於調用無返回值的函數,startActivityForResult()調用的Activity有返回值,可以通過 Activity.setResult()來返回結果。
Context.startService()用來初始化Service,Context.bindService()可以用來建立與目標Service之間的連接,如果 Service沒有運行,則會啟動該Service。
Broadcast Receiver是通過 Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和 Context.sendStickyBroadcast()來觸發的。大部分的Broadcast消息來自於Android操作系統,如電池狀態,來電,短消息等。
和URL不太一樣的是,URL和網站一般是一一對應的,而一個Intent可以用來觸發某個指定的Activity,Service或是 Broadcast Receiver,或是觸發多個滿足Intent條件的Activities,Services或是Broadcast Receivers。
下面來看看 Android OS如何根據Intent來找到滿足觸發條件的Activity,Service或是Broadcast Receiver. 借用SQL 數據庫的概念 可以更好的理解。
SELECT (Activitives|Services|Broadcast Receivers) AS Target
FROM (List in AndroidManifest.xml)
WHERE Intent Meet Target’s (Intent Filter)
意思就是從AndroidManifest.xml中定義的 Activities,Services和Broadcast Receiver列表中查找符合Intent 條件的Activities,Services,或是Broadcast Receivers 。所有能活被激活的Activity,Service和Broadcast Receiver都必須在AndroidManifest.xml有定義,否則Android OS無法查詢 到該目標,相當於數據庫中無記錄,即使你在代碼中定義了該Activity,Service或Broadcast Receiver。
Intent
Intent本身為一個數據載體,可以描述想要執行的操作以及用於這個操作的數據和其它屬性。它主要包含下列 信息:
Component name:可以處理該Intent的組件名稱,組件名稱指定義Activity,Service的包和類的全名稱。比如類名為 com.pstreets.gisengine.AndroidGISEngineTutorial ,包名為com.pstreets.gisengine。 組件名稱為可選項,如果指定了,意 味明確指定用來響應該Intent的Activity,Service。
Action: 列出需要執行的操作名稱。或者在Broadcast Intents的情況 下給出發生的事件名稱。
Constant Target component Action ACTION_CALL activity 開始打電話. ACTION_EDIT activity 顯示編輯對話 框. ACTION_MAIN activity 作為一個任務(應用)的起始Activity,對於可以從Android應用列表的應用來說,都需要在 AndroidManifest.xml 中設置ACTION_MAIN的Intent-Filter屬性。 ACTION_SYNC activity 同步數 據. ACTION_BATTERY_LOW broadcast receiver 電池電量低告警. ACTION_HEADSET_PLUG broadcast receiver 耳機插入或拔出. ACTION_SCREEN_ON broadcast receiver 屏幕打開或關閉. ACTION_TIMEZONE_CHANGED broadcast receiver 時區變動.Data:定義不數據的URL以及數據的MIME類型。不同的Action能夠處理 的Data類型也不一樣,比如 ACTION_CALL,它處理的數據格式為tel: URI,URI為電話號碼。
Category: 定義了可以響應 Intent的附加信息,一個Intent可以指定多個Category類型。和Action類似,Android 預定義了一些Category類型:
Constant Meaning CATEGORY_BROWSABLE 表示目標Activity可以 使用浏覽器安全顯示指定連接,比如說一個圖片或是Email消息. CATEGORY_GADGET 表示該Activity可以當作一個Gadget嵌入到其它可以放置Gadget的Activity中。 CATEGORY_HOME 表示還Activity是Home Screen,可以設置這個屬性來替換Android自帶的 Home Screen。 CATEGORY_LAUNCHER 該Activity可以顯示在Android程 序管理器中。一般應用的主Activity都會在AndroidManifest.xml 定義該屬性。今天寫了一個簡單的記憶便箋小程序,但是卻發現在判斷添加數據不能為空的時候,自己的代碼總是不起作用。 String titleStr = addtitle()() Stri
Android中的本地窗口FramebufferNativewindow 1.1 Android中的本地窗口在OpenGL的學習過程中,我們不斷提及&ldquo
除了fragments(碎片),在Android3和4中新增加的特性,還有ActionBar(活動欄)。ActionBar位於傳 統標題欄的位置,就在設備屏幕的頂部。Ac
以前做過的一個項目,Fragment嵌套高德地圖,當再次進入Fragment的時候,會出現奇怪的現象。嵌套的地圖會出現滑動不動的情況,起先還以為是高德的bug呢,經過一番