什么是Intent? 转
一、Intent 作用
??? Intent 是一個將要執(zhí)行的動作的抽象的描述,一般來說是作為參數(shù)來使用,由Intent來協(xié)助完成Android各個組件之間的通訊。比如說調(diào)用 startActivity()來啟動一個activity,或者由broadcaseIntent()來傳遞給所有感興趣的 BroadcaseReceiver, 再或者由startService()/bindservice()來啟動一個后臺的service.所以可以看出來,intent主要是用來啟動其他的 activity 或者service,所以可以將intent理解成activity之間的粘合劑。
??? 要在不同的activity之間傳遞數(shù)據(jù),就要在intent中包含相應(yīng)的東西,一般來說數(shù)據(jù)中最基本的應(yīng)該包括:action、data/type、 category和extras,它們一起形成了一種語言,這種語言可以表達出諸如“給張三打電話”之類的短語組合。
??? 對于明確指出了目標(biāo)組件名稱的Intent,我們稱之為“顯式Intent”。對于沒有明確指出目標(biāo)組件名稱的Intent,則稱之為“隱式 Intent”。Android系統(tǒng)使用IntentFilter 來尋找與隱式Intent相關(guān)的對象。顯式Intent直接用組件的名稱定義目標(biāo)組件,這種方式很直接。但是由于開發(fā)人員往往并不清楚別的應(yīng)用程序的組件 名稱,因此,顯式Intent更 多用于在應(yīng)用程序內(nèi)部傳遞消息。比如在某應(yīng)用程序內(nèi),一個Activity啟動一個Service。隱式Intent恰恰相反,它不會用組件名稱定義需要 激活的目標(biāo)組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。
二、Intent的構(gòu)造函數(shù)
公共構(gòu)造函數(shù):
1、Intent() 空構(gòu)造函數(shù)
2、Intent(Intent o) 拷貝構(gòu)造函數(shù)
3、Intent(String action) 指定action類型的構(gòu)造函數(shù)
4、Intent(String action, Uri uri) 指定Action類型和Uri的構(gòu)造函數(shù),URI主要是結(jié)合程序之間的數(shù)據(jù)共享ContentProvider
5、Intent(Context packageContext, Class<?> cls) 傳入組件的構(gòu)造函數(shù),也就是上文提到的
6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前兩種結(jié)合體
Intent有六種構(gòu)造函數(shù),3、4、5是最常用的,并不是其他沒用!
Intent(String action, Uri uri)? 的action就是對應(yīng)在AndroidMainfest.xml中的action節(jié)點的name屬性值。在Intent類中定義了很多的Action和Category常量。
示例代碼:
?? 1: Intent intent = new Intent(Intent.ACTION_EDIT, null);
?? 2: startActivity(intent);
示 例代碼是用了第四種構(gòu)造函數(shù),只是uri參數(shù)為null。執(zhí)行此代碼的時候,系統(tǒng)就會在程序主配置文件AndroidMainfest.xml中尋 找<action android:name="android.intent.action.EDIT" />對應(yīng)的Activity,如果對應(yīng)為多個activity具有<action android:name="android.intent.action.EDIT" />此時就會彈出一個dailog選擇Activity。
三、實例
HelloWorldActivity.java 中的通過startActivity(intent)告訴Android啟動新的Activity,但在AndroidManifest.xml(代碼如 下)中的intent-filter卻匹配不到intent,但并沒有報錯,因為HelloWorldActivity.java是Activity類的 子類,intent可以和Activity的intent-filter匹配,則直接調(diào)用Activity自身了。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
??? package="john.android.test.hello"
??? android:versionCode="1"
??? android:versionName="1.0" >
??? <uses-sdk android:minSdkVersion="7" />
??? <application
??????? android:icon="@drawable/ic_launcher"
??????? android:label="@string/app_name" >
??????? <activity
??????????? android:label="常聯(lián)系"
??????????? android:name=".HelloWorldActivity" >
??????????? <intent-filter >
??????????????? <action android:name="android.intent.action.MAIN" />
??????????????? <category android:name="android.intent.category.LAUNCHER" />
??????????? </intent-filter>
??????? </activity>
??? </application>
</manifest>
轉(zhuǎn)載于:https://www.cnblogs.com/carbs/archive/2012/06/30/2571328.html
總結(jié)
以上是生活随笔為你收集整理的什么是Intent? 转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#事件-自定义事件
- 下一篇: PHP操作FTP类 (上传下载移动创建等