《Android Dev Guide》系列教程3:應用基礎之組件篇2

  《Android Dev Guide》系列教程3:應用基bu礎之組件篇2 懶骨頭(http://blog.csdn.com/iamlazybone)
  激活組件: intents
  當ContentResolver接收到一個請求時,運行content providers。其他三個組件activities、services、broadcast receiver被Intents異步消息啓動。intent 裏包含着所傳遞消息的內容。對於activity和services來說,intents定義了請求,指定了目標數據的URI。例如,可以讓發送一個請求讓用戶接受或者輸入一些文本信息。對broadcast receivers來說,intents定義了一些聲明的事件(?),例如:他可以在相機的按鈕被按下時發出一些信息。
  下面是每個組件類型對應的啓動方法
  @ Context.startActivity() 和 Activity.startActivityForResult()方法可以啓動一個activity。activity可以查看啓動他的的intent,通過調用getIntent()方法。Android 系統調用onNewIntent()方法來傳遞intents。
  一個activity經常會啓動下一個activity。使用startActivityForResult() 代替 startActivity()方法可以從啓動的activity獲取一些返回值。例如,可以啓動一個activity讓用戶選擇一張圖片並且返回所選的圖片,被傳遞回來的數據被送到前一個activity的onActivityResult()方法裏。
  @ Context.startService()可已啓動一個service。Android通過service的onStart()方法傳遞intent對象。類似的,intent可以傳遞至Context.bindService()來獲取一個正在運行的服務的句柄,這個服務可通過onBind()方法獲取這個intent對象(如果服務沒有啓動可以通過bindService()來啓動服務)。例如,一個activity可以很容易的建立一個到音樂播放服務的連接,他可以提供給用戶一些控制音樂播放器的藉口。activity可以調用bindService()方法來建立連接,然後調用已經定義的關於播放器的一些方法。
  @ 應用程序可以通過傳遞intent來初始化一個Broadcast廣播,相關方法:Context.sendBroadcast()、Context.sendOrderedBroadcast()、Context.sendStickyBroadcast() ,activity會調用所有對此廣播關注的廣播接收器,然後將intent傳遞給這些方法。
  關閉組件
  只有當內容提供商從內容接收者接收到一個請求時纔會啓動。廣播消息接受者只有當接收到一個廣播消息時纔會被啓動。所以他們不需要手動關閉。
  activity則另當別論,他們提供給用戶界面,他們和用戶保持長時間的對話並且保持活躍狀態,甚至空閒時,仍然保持聯繫。類似的,services也會運行很長一段時間。所以Android提供關閉activity和services的一些方法:
  @ finish()會關閉activity,那些被startActivityForResult()方法啓動的activity可以通過finishActivity()關閉。
  @ services 可以通過 stopSelf()和Context.stopService() 方法被關閉。
  當系統不再使用他們或者沒有足夠內存世,系統可以自行關閉一些組件,後面的章節會討論這種情況。
  manifest 文件
  在Android啓動一個應用組件前,必須讓activity知道那些組件的存在,所以應用程序必須在manifest文件裏聲明自己的組件,並把manifest文件打包到Android 包裏。apk文件包含程序的代碼、文件和資源。
  manifest是一個結構化的xml文件,被命名爲AndroidManifest.xml,裏面聲明瞭應用的組件、一些除了系統默認庫的用戶自定義庫和程序希望被授予的一些權限。
  manifest主要任務是告訴Android應用程序的部件。例如,activity可以這樣聲明:
   . . . 元素的name屬性是繼承自activity基類的activity的類名,icon和label指向了資源文件。
  別的組件聲明起來就簡單的多了。服務的標籤:,廣播接受者標籤:,內容提供商標籤:。
  activity、services和內容提供商不在這裏聲明的話是不能運行的。然而,廣播可以在manifest文件裏聲明或者動態的在代碼裏創建並且調用Context.registerReceiver()方法聲明。
  Intent filters
  Intent對象可以顯示的定義一個目標組件。那樣的話,Android就可以找到並運行它。如果目標組件沒有明確的定義出來,Android會相應最佳的組件來響應這個Intent,這是通過比較標籤裏的所有組件來選擇相應的。intent filters (Intent過濾器)告訴Android所有可以處理的組件。和組件的其他重要信息一樣,在manifest文件裏聲明。
  下面是一個添加了兩個Intents過濾器的例子:
   . . . 例子中的第一個過濾器是常見的。他標記了所有顯示給用戶讓用戶選擇啓動的組件。換句話說就是程序的入口點。是用戶啓動程序後最先見到的。
  第二個過濾器聲明瞭可以提供(perform)的特殊數據類型。(對否?呵呵)
  一個組件可以有數個Intent過濾器。每一個都可以聲明不同的權限。如果沒有添加過濾器的話,只能使用Intent方式被啓動。
  對於廣播接受者來說,如果在代碼中被創建和註冊,那麼直接被實例化成一個IntentFilters對象,其他的過濾器都在manifest文件裏被聲明。
  後記:
  自己都覺得語句不通~原諒骨頭吧~給大家個找錯的機會~哈哈~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章