Android進程間的通訊

來源:互聯網
上載者:User

標籤:

1.概述:由於android系統中應用程式之間不能共用記憶體。因此,在不同應用程式之間互動資料(跨進程通訊)就稍微麻煩一些。在android SDK中提供了4種用於跨進程通訊的方式。這4種方式正好對應於android系統中4種應用程式組件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨進程調用其他應用程式的Activity;Content Provider可以跨進程訪問其他應用程式中的資料(以Cursor對象形式返回),當然,也可以對其他應用程式的資料進行增、刪、改操 作;Broadcast可以向android系統中所有應用程式發送廣播,而需要跨進程通訊的應用程式可以監聽這些廣播;Service和Content Provider類似,也可以訪問其他應用程式中的資料,但不同的是,Content Provider返回的是Cursor對象,而Service返回的是Java對象,這種可以跨進程通訊的服務叫AIDL服務。

2.AIDL(Android Interface Definition Language)是一種介面定義語言,編譯器通過*.aidl檔案的描述資訊產生符合通訊協定的Java代碼,我們無需自己去寫這段繁雜的代碼,只需要在需要的時候調用即可,通過這種方式我們就可以完成進程間的通訊工作。關於AIDL的編寫規則我在這裡就不多介紹了,讀者可以到網上尋找一下相關資料。

3.四種跨進程訪問的方式:

方式一:訪問其他應用程式的Activity Activity既可以在進程內(同一個應用程式)訪問,也可以跨進程訪問。如果想在同一個應用程式中訪問Activity,需要指定Context對象和Activity的Class對象,代碼如下:

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

Activity的跨進程訪問與進程內訪問略有不同。雖然它們都需要Intent對象,但跨進程訪問並不需要指定Context對象和Activity的 Class對象,而需要指定的是要訪問的Activity所對應的Action(一個字串)。有些Activity還需要指定一個Uri(通過 Intent構造方法的第2個參數指定)。在android系統中有很多應用程式提供了可以跨進程訪問的Activity,例如,下面的代碼可以直接調用撥打到電話的Activity。

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

Android進程間的通訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.