Android中進程之間通信的機制--Activity


Activity是android系統的三大組件之一,他可以跨進程去調用別的進程中的activity。

1.前提:

      被調用的activity必須是共享的。在電話撥號器的例子中,

  1. ntent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678"));  
  2. startActivity(callIntent); 

執行完這些代碼后,該應用程序就會去調用系統的撥號功能,實現撥號。其實系統的撥號功能也是有一個activity實現的,系統把這個activity共享了,給他注冊了一個id號叫做:android.intent.action.CALL

2.怎么實現activity的共享

       就是給activity注冊一個唯一標識符action。在功能配置文件中的意圖過濾器中配置他,他的元素名稱叫做action,我們可以稱之為動作,他的作用是告訴android做什么,就是要去調用那個activity實現功能。

3.如何調用別的進程中的activity

       這里就要用到意圖了,intent是一種運行時綁定機制,他有效地降低了android中組件的耦合性。意圖通過意圖,程序可以向android系統表達某種意願或訴求,讓系統執行某些動作,他還可以激活新的activity或者讓activity執行新的動作。intent的構造函數有一個是這樣的Intent(String action, Uri uri),第一個參數是共享的activity的唯一標識符。第二個參數是uri。它包括協議和數據。activity的Intent-filter是相 對應的,action能夠匹配出由那個activity來執行動作,uri來告訴這個activity具體干什么。因為一個activity可以配置多個 Intent-filter,例如記事本程序的NoteEditor activity有兩個filter -- 一個啟動並顯示一個特定的記錄給用戶查看或編輯, 另一個啟動一個空的記錄給用戶編輯.

4.如何傳遞數據

       所有的數據都是通過intent來傳遞的,但是我們可以根據實現方式的不同來划分為兩種方式,第一種直接在uri中綁定數據,通常為協議頭+數據,例如Uri.parse("tel:12345678")); 另一種方式是通過intent的put**方法來綁定數據或者intent直接綁定bundler對象。

5.當調用一個新的activity之后,如何獲得這個activity的返回值

使用startActivityForResult方法來啟動其他應用程序的Activity,以便獲得Activity的返回值

然后在InvokeActivity中使用下面的代碼來調用Main。

  1. intent = new Intent("net.blogjava.mobile.MYACTION", Uri.parse("info://調用其他應用程序的Activity"));  
  2. intent.putExtra("value", "調用成功");  
  3. startActivityForResult(intent, 1);             // 1為請求碼

獲得返回值:必須要實現onActivityResult方法

  1. protected void onActivityResult(int requestCode, int resultCode, Intent data)  
  2. {  
  3.    Toast.makeText(this, "返回值:" + data.getExtras().getString("result"),  
  4.            Toast.LENGTH_LONG).show();  
  5. }

總結:跨進程訪問Activity(訪問其他應用程序中的Activity)主要是通過一個Action來完成的,如果要傳遞數據,還需要指定一個 Uri。當然,傳遞數據也可以通過Intent來完成。傳遞數據的過程可以是雙向的。如果要想從調用的Activity中返回數據,就需要使用 startActivityForResult方法來啟動Activity了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM