Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Intent詳解

Android Intent詳解

編輯:關於Android編程

在讀罷他人的博客之後,自己對Intent的整理如下:

首先說自己的心得:Intent實現了解耦;

一:Intent是”目的,意圖”,主要用來在組件之間實現通信。具體而言:

1.Android中提供了Intent機制來協助應用間的交互與通訊,或者采用更准確的說法是,Intent不僅可用於應用程序之間,也可用於應用程序內部的activity, service和broadcast receiver之間的交互。

2.Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來響應。

3.activity、service和broadcast receiver之間是通過Intent進行通信的,而另外一個組件Content Provider本身就是一種通信機制,不需要通過Intent。

二:關於Intent實現三大組件之間的通信:

1.使用Context.startActivity() 或 Activity.startActivityForResult(),傳入一個intent來啟動一個activity。使用 Activity.setResult(),傳入一個intent來從activity中返回結果。

2.將intent對象傳給Context.startService()來啟動一個service或者傳消息給一個運行的service。將intent對象傳給 Context.bindService()來綁定一個service。

3.將intent對象傳給 Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等廣播方法,則它們被傳給 broadcast receiver。

三:intent的七大屬性:

1.component(組件):目的組件

2.action(動作):用來表現意圖的行動

3.category(類別):用來表現動作的類別

4.data(數據):表示與動作要操縱的數據

5.type(數據類型):對於data范例的描寫

6.extras(擴展信息):擴展信息

7.Flags(標志位):期望這個意圖的運行模式

Intent類型分為顯式Intent(直接類型)、隱式Intent(間接類型)。谷歌官方建議使用隱式Intent。上述屬性中,component屬性為直接類型,其他均為間接類型。

下面詳細介紹用Intent的屬性來啟動Activity的過程:

四:

1.Component屬性明確指定Intent的目標組件的類名稱。(屬於直接Intent)

如果 component這個屬性有指定的話,將直接使用它指定的組件。指定了這個屬性以後,Intent的其它所有屬性都是可選的。

 button1.setOnClickListener(new OnClickListener() {            
             @Override
             public void onClick(View v) {
                  //創建一個意圖對象
                  Intent intent = new Intent();
                  //創建組件,通過組件來響應
                  ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class);
                  intent.setComponent(component);                
                  startActivity(intent);                
             }
         });

簡單的寫法如下:

Intent intent=new Intent();
intent.setClass(MainActivity.this,GuideActivity.class);
startActivity(intent);

或者:

Intent intent=new Intent(MainActivity.this,GuideActivity.class);
startActivity(intent);

2.通過Action和category來啟動Activity.Action必須與Category來一起使用來啟動組件:
在清單文件中配置:

          
                
                
           

在代碼中設置:

intent.setAction("myGuideActivity");
startActivity(intent);

來啟動Activity
3.data(數據):表示與動作要操縱的數據 :
Data是用一個uri對象來表示的,uri代表數據的地址,屬於一種標識符。通常情況下,我們使用action+data屬性的組合來描述一個意圖:做什麼
使用隱式Intent,我們不僅可以啟動自己程序內的活動,還可以啟動其他程序的活動,這使得Android多個應用程序之間的功能共享成為了可能。比如應用程序中需要展示一個網頁:

 button1.setOnClickListener(new OnClickListener() {            
              @Override
              public void onClick(View v) {
                  Intent intent = new Intent();
                  intent.setAction(Intent.ACTION_VIEW);
                  Uri data = Uri.parse("http://www.baidu.com");
                  intent.setData(data);                
                  startActivity(intent);        
              }
        });

其中指定了Intent的action是 Intent.ACTION_VIEW,表示查看的意思,這是一個Android系統內置的動作
4.extras(擴展信息):擴展信息是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,比如,如果要執行“發送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras裡,傳給電子郵件發送組件。
5.type(數據類型):對於data范例的描寫
如果Intent對象中既包含Uri又包含Type,那麼,在中也必須二者都包含才能通過測試。Type屬性用於明確指定Data屬性的數據類型或MIME類型,但是通常來說,當Intent不指定Data屬性時,Type屬性才會起作用,否則Android系統將會根據Data屬性值來分析數據的類型,所以無需指定Type屬性。data和type屬性一般只需要一個,通過setData方法會把type屬性設置為null,相反設置setType方法會把data設置為null,如果想要兩個屬性同時設置,要使用Intent.setDataAndType()方法。
6.Flags(標志位):期望這個意圖的運行模式,一個程序啟動後系統會為這個程序分配一個task供其使用,另外同一個task裡面可以擁有不同應用程序的activity。那麼,同一個程序能不能擁有多個task?這就涉及到加載activity的啟動模式,這個需要單獨講一下。
注:android中一組邏輯上在一起的activity被叫做task,自己認為可以理解成一個activity堆棧。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved