Intent傳輸資料的幾種機制

來源:互聯網
上載者:User

標籤:android   blog   java   使用   檔案   資料   

1.Intent是什麼

 

Intent是視圖的意思,它是Android應用內不同組件之間通訊的載體。當Android運行時需要串連不同的組件時,通常就需要藉助於Intent來實現。Intent可以啟動應用中另一個Activity,也可以啟動一個Service組件,還可以發送一條廣播訊息來觸發系統中的BroadcastReceiver。Activity,Service和BroadcastReceiver三個組件之間的通訊都以Intent作為載體。

(1)啟動一個Activity時,可以調用Context的startActivity(Intent intent)或者Activity的startActivityForResult(Intent intent,int requestCode),參數intent封裝了需要啟動的Activity的資訊。

(2)啟動一個Service時,可以調用Context的startService(Intent intent)的方法或bindService(Intent service,ServiceConnection conn,int flags)方法,Intent參數封裝了需要啟動的目標Service的資訊。

(3)觸發一個BroadcastReceiver時,可以調用Context的sendBroadcast(Intent intent),sendStickyBroadcast()或sendOrderedBroadcast(),這三個方法中的Intent參數封裝了需要觸發的目標BroadcastReceiver的資訊。

2.Intent存的是什麼資訊:(自己理解)Intent中存的資訊包括本Activity的資訊以及將要跳轉的Activity的資訊。

3.顯式Intent和隱式Intent 顯式Intent:決定目標組件的唯一要素是組件名稱。更多的用在應用程式內部傳遞資訊。

4.Intent解析機制:Android是通過Intent的action,type和category來判斷的。 隱式Intent:沒有明確指出組件名稱,由Android系統協助程式尋找與Intent請求意圖最匹配的組件。Android系統使用IntentFilter來尋找與隱式Intent相關的對象。更多的用在不同應用程式傳遞資訊:例如跳轉到開啟音樂播放器,開啟圖庫等。

5.Intent啟動Activity的方式。

startActivity()是非同步作業,開啟新的ActivityB和原的ActivityA同時執行。 startActivityForResult()是同步操作,ActivityA在開啟新的ActivityB後將自己阻塞,ActivityB退出以後ActivityA才繼續執行,並根據ActivityB返回的結果執行下一步的操作。

(1)使用startActivity(Intent intent)直接啟動。

(2)使用startActivityForResult(Intent intent, Int requestCode),setResult(int resultCode, Intent intent),onActivityResult(int requestCode, int resultCode, Intent intent)

A通過startActivityForResult()開啟B的流程。

a.首先在A中調用startActivityForResult(Intent intent, Int requestCode)。

Intent參數代表的是一個普通的intent,例如:從A跳到B,可以Intent intent = new Intent(A.cthis,B.class); intent指定了要跳轉到B,且包含了A傳給B的資料。requestCode>=0,如果A還要跳轉到C,D等等,requestCode就對應不同的值。例如:從A跳轉到B,C,D等等,可以分別用1,2,3等等來區分。在後面的onActivityResult()中需要以此來區分各個Activity傳回的結果。

例如:

  //startActivityForResult(intent,1);  --1:B   //startActivityForResult(intent,2);  --2:C   //startActivityForResult(intent,3);  --3:C      protected void onActivityResult(int requestCode, int resultCode, Intent data) {           switch (requestCode) {                 case 1:                       ...                       break;                 case 2:                       ...                       break;                  case 3:                       ...                       break;               default:                break;   } 

  

  

b.在B中setResult(int resultCode, Intent intent)。

resultCode用來區分B有幾種不同的返回結果。

intent(本例子)參數代表的是返回A,主要用來返回額外的資料,最終會傳給A的onActivityResult()

c.最後在A中調用onActivityResult(int requestCode, int resultCode, Intent data)   

requestCode :區分是哪個Activity傳回來的   

requestCode :區分傳給哪個Activity   

data : B中調用setResult時傳回的那個intent。

6.Intent傳遞資料的方式。

(1)putXXXExtra(“key”,”value”);

(2)先new一個Bundle的對象,Bundle用來攜帶資料。然後在調用intent.putExtras(bundle);

(3)Intent要求傳送的資料必須實現實現Serializable介面或者Parcelable介面中的一種。

7.Intent傳遞資料的類型。

(1)Integer類型的ArrayList

(2)String類型的ArrayList

(3)其他類型(其他類型好像只可以用序列化),要引用Serializable介面。Serializable介面就是java提供的通用資料儲存和讀取的介面。任何類型只要實現了Serializable介面就可以被儲存到檔案中,或者作為資料流通過網路發送到別的地方。也可以通過管道傳輸到系統的其他程式中。Serializable不僅可以本機使用還可以經由網路操作(RMI)。這樣的好處是自動屏蔽了作業系統的差異。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.