偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Android開發(fā)入門:如何激活和關(guān)閉組件

移動開發(fā) Android
Content Provider需要Content Resolver激活,其他的三大組件——活動、服務(wù)和廣播接收者,被一種叫做意圖(intent)的異步消息激活。下面將分別介紹各組件的激活和關(guān)閉方法。

本篇將介紹如何激活組關(guān)閉組件等。本文的主題如下:

  • 1、激活組件:意圖(Intents)
    • 1.1、活動(Activity)組件的激活
    • 1.2、服務(wù)(Service)組件的激活
    • 1.3、廣播接收者(Broadcast receiver)組件的激活
  • 2、關(guān)閉組件
  • 3、清單文件
  • 4、Intent過濾器

1、激活組件:意圖(Intents)

當(dāng) 接收到ContentResolver發(fā)出的請求后,內(nèi)容提供者被激活。而其它三種組件——活動、服務(wù)和廣播接收者,被一種叫做意圖(intent)的異步消息激活。意圖是一個保存著消息內(nèi)容的Intent對象。對于活動和服務(wù)來說,Intent對象指明了請求的操作名稱以及作為操作對象的數(shù)據(jù)的URI和其它一些信息。

例如,它可以傳遞對活動的一個請求,讓它為用戶顯示一張圖片,或者讓用戶編輯一些文本。而對于廣播接收者而言,Intent對象指明了廣播的行為。例如當(dāng)照相按鈕被按下,它可以對所有感興趣的對象廣播。

對于每種組件來說,激活的方法是不同的。下面將分別介紹活動、服務(wù)、廣播接收者組件的激活方法。

1.1、活動(Activity)組件的激活

通 過傳遞一個Intent對象至Context.startActivity()或Activity.startActivityForResult()以 載入(或指定新工作給)一個活動。相應(yīng)的活動可以看到初始的意圖,這個意圖通過getIntent() 方法來查看激活活動。Android調(diào)用活動的onNewIntent()方法傳遞任何后續(xù)的意圖。

一 個活動經(jīng)常啟動了下一個。如果它期望它所啟動的那個活動返回一個結(jié)果,它會調(diào)用startActivityForResult()而不是 startActivity()。例如,如果它啟動了一個活動讓用戶挑選一張照片,它可能會返回被選中的照片。結(jié)果以一個Intent對象傳遞調(diào)用活動的 onActivityResult() 方法。

1.2、服務(wù)(Service)組件的激活

通過傳遞一個Intent對象至Context.startService()以啟動一個服務(wù)(或給予正在運(yùn)行的服務(wù)以一個新的指令)。Android調(diào)用服務(wù)的onStart()方法并將Intent對象傳遞給它。

與 此類似,一個Intent可以傳遞給Context.bindService()以在調(diào)用的組件和目標(biāo)服務(wù)之間建立持續(xù)的連接。這個服務(wù)會在調(diào)用 onBind() 方法中接受這個Intent對象(如果服務(wù)尚未啟動,bindService()會先啟動它)。例如,一個活動可以連接至前面講到的音樂播放服務(wù),并提供 給用戶一個可操作的(用戶界面)以對播放進(jìn)行控制。這個活動可以調(diào)用bindService()來建立連接,然后調(diào)用服務(wù)中定義的對象來控制播放。

1.3、廣播接收者(Broadcast receiver)組件的激活

應(yīng)用程序可以通過將Intent對象傳遞給

  • Context.sendBroadcast()
  • Context.sendOrderedBroadcast()
  • Context.sendStickyBroadcast()

及其它類似方法來產(chǎn)生一個廣播。Android會通過onReceive()方法將intent傳遞給所有對此廣播有興趣的廣播接收者。

2、關(guān)閉組件

內(nèi)容提供者僅在響應(yīng)ContentResolver提出請求的時候激活。而一個廣播接收者僅在響應(yīng)廣播信息的時候激活。所以,沒有必要去顯式的關(guān)閉這些組件。

而活動則不同,它提供了用戶界面。與用戶進(jìn)行會話,所以只要會話依然持續(xù),哪怕對話進(jìn)程空閑,它都會一直保持激活狀態(tài)。與此相似,服務(wù)也會在很長一段時間內(nèi)保持運(yùn)行。所以Android提供方法有序地關(guān)閉活動和服務(wù)。

  • 可以通過調(diào)用它的finish()方法來關(guān)閉一個活動。一個活動也可以通過調(diào)用finishActivity()方法來關(guān)閉另外一個活動(它用startActivityForResult() 啟動的)。
  • 服務(wù)可以通過調(diào)用它的stopSelf()方法來停止,或者調(diào)用 Context.stopService()。

當(dāng)組件不再被使用的時候或者Android必須要為更多活躍的組件回收內(nèi)存時,組件也可能會被系統(tǒng)關(guān)閉。

3、清單(manifest)文件

當(dāng)Android啟動一個應(yīng)用程序組件之前,它必須知道那個組件是存在的。所以,應(yīng)用程序會在一個清單(manifest)文件中聲明它的組件,這個文件會被打包到Android包中。這個.apk文件還將包括應(yīng)用程序的代碼、文件以及其它資源。

這個清單文件是XML結(jié)構(gòu)的文件,且所有的Android應(yīng)用程序都把它叫做AndroidManifest.xml。為聲明一個應(yīng)用程序組件,它還會做很多額外工作,比如指明應(yīng)用程序所需鏈接到的庫的名稱(除了默認(rèn)的Android庫之外)以及聲明應(yīng)用程序期望獲得的各種權(quán)限。

但清單文件的主要功能仍然是向Android聲明應(yīng)用程序的組件。舉例說明,一個活動可以如下聲明:

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest . . . >    
  3.     <application . . . > 
  4.          <activity android:name="com.example.project.FreneticActivity" 
  5.                    android:icon="@drawable/small_pic.png" 
  6.                    android:label="@string/freneticLabel" 
  7.                     . . .  > 
  8.          </activity> 
  9.           . . . 
  10.      </application> 
  11. </manifest> 

<activity>元素的name屬性指定了實(shí)現(xiàn)了這個活動的Activity類的子類,icon和 label屬性指向了包含展示給用戶的此活動的圖標(biāo)和標(biāo)簽的資源文件。其它組件也以類似的方法聲明——<service> 元素用于聲明服務(wù),<receiver> 元素用于聲明廣播接收者,而<provider>元素用于聲明內(nèi)容提供者。

清單文件中未進(jìn)行聲明的活動、服務(wù)以及內(nèi)容提供者將不為系統(tǒng)所見, 從而也就不會被運(yùn)行。然而,廣播接收者既可以在清單文件中聲明,也可以在代碼中動態(tài)的創(chuàng)建(作為BroadcastReceiver對象)且調(diào)用 Context.registerReceiver()方式注冊到系統(tǒng)。

4、Intent過濾器

Intent對象可以顯式地指定目標(biāo)組件。如果進(jìn)行了這種指定,Android會找到這個組件(依據(jù)清單文件中的聲明)并激活它。

但如果Intent沒有進(jìn)行顯式的指定,Android就必須為它找到對于 intent來說最合適的組件。這個過程是通過比較Intent對象和所有可能對象的intent過濾器完成的。組件的intent過濾器會告知 Android它所能處理的intent類型。如同其它關(guān)于組件的必要信息一樣,它們在清單文件中進(jìn)行聲明的。這里是上面示例的一個擴(kuò)展,其中加入了針對活動的兩個intent過濾器聲明:

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest . . . >    
  3.     <application . . . > 
  4.          <activity android:name="com.example.project.FreneticActivity" 
  5.                    android:icon="@drawable/small_pic.png" 
  6.                    android:label="@string/freneticLabel" 
  7.                     . . .  > 
  8.               <intent-filter . . . > 
  9.                   <action android:name="android.intent.action.MAIN" /> 
  10.                   <category android:name="android.intent.category.LAUNCHER" /> 
  11.               </intent-filter> 
  12.               <intent-filter . . . > 
  13.                   <action android:name="com.example.project.BOUNCE" /> 
  14.                   <data android:mimeType="image/jpeg" /> 
  15.                   <category android:name="android.intent.category.DEFAULT" /> 
  16.               </intent-filter> 
  17.          </activity> 
  18.           . . . 
  19.      </application> 
  20. </manifest> 

示例中的第一個過濾器——action:“android.intent.action.MAIN”和 category:“android.intent.category.LAUNCHER”的組合,是常見的。

它標(biāo)記這個活動顯示在應(yīng)用程序啟動器中,用戶在設(shè)備上看到的可啟動的應(yīng)用程序列表。換句話說,這個活動是應(yīng)用程序的入口,是用戶選擇運(yùn)行這個應(yīng)用程序后所見到的第一個活動。第二個過濾器聲明了這個活動針對特定類型的數(shù)據(jù)。

一個組件可以擁有任意數(shù)量的intent過濾器,每個聲明一系列不同的能力。如果它沒有包含任何過濾器,它將只能被顯式聲明了目標(biāo)組件名稱的意圖激活。對于廣播接收者,它在代碼中創(chuàng)建并注冊intent過濾器,直接作為IntentFilter的對象實(shí)例化。其它過濾器則在清單文件中設(shè)置。

責(zé)任編輯:徐川 來源: eoeAndroid
相關(guān)推薦

2013-01-10 13:50:25

Android開發(fā)組件

2013-01-10 14:21:24

Android開發(fā)組件Activities

2013-01-17 15:51:42

Android開發(fā)應(yīng)用程序組件

2011-09-09 14:09:17

Android Wid

2013-04-08 14:12:03

Android開發(fā)googleMap入門SDK

2013-01-16 14:41:14

Android開發(fā)Android SDK

2013-01-16 15:07:30

Android NDKAndroid開發(fā)

2017-12-06 10:50:50

Linux自動喚醒系統(tǒng)運(yùn)行時間

2013-02-25 11:06:34

2013-05-20 15:42:22

2009-03-11 13:18:57

Android入門Android開發(fā)Android模擬器

2010-02-04 17:59:50

Android SDK

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2010-09-06 09:43:46

TCPUDPAndroid

2015-07-16 15:20:58

DockerDjango

2024-05-23 08:05:04

2020-08-26 07:48:41

React Spect組件庫開發(fā)

2023-11-06 13:17:53

ServiceAndroid

2014-02-26 13:08:48

AndroidService教程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號