當前位置:首頁 » 安卓系統 » android跨進程通信

android跨進程通信

發布時間: 2022-08-26 02:50:53

『壹』 android中eventbus能夠實現進程間通信嗎

不可以用於多進程。EventBus貌似就是訂閱者模式,而在多進程中,對象是不一致的,需要通過binder才能進行多進程通信,在這方面EventBus不支持,自然就不支持多進程了。

『貳』 餓了么開源的Android跨進程事件分發框架HermesEventBus

原理

事件收發是基於EventBus,IPC通信是基於Hermes。Hermes是一個簡單易用的Android IPC庫。

首先選一個進程作為主進程,將其他進程作為子進程。

每次一個event被發送都會經過以下四步:

1、使用Hermes庫將event傳遞給主進程。

2、主進程使用EventBus在主進程內部發送event。

3、主進程使用Hermes庫將event傳遞給所有的子進程。

4、每個子進程使用EventBus在子進程內部發送event。

用法

能在app內實現多進程event收發,也可以跨app實現event收發。

單一app內的用法

如果你在單一app內進行多進程開發,那麼只需要做以下三步:

Step 1

在gradle文件中加入下面的依賴:
dependencies {
compile 'xiaofei.library:hermes-eventbus:0.1.1'
}

Step 2

在Application的onCreate中加上以下語句進行初始化:
HermesEventBus.getDefault().init(this);

Step 3

每次使用EventBus的時候,用HermesEventBus代替EventBus。
HermesEventBus.getDefault().register(this);
HermesEventBus.getDefault().post(new Event());

HermesEventBus也能夠在一個進程間傳遞event,所以如果你已經使用了HermesEventBus,那麼就不要再使用EventBus了。

多個app間的用法(使用DroidPlugin的時候就是這種情況)

如果你想在多個app間收發event,那麼就做如下幾步:

Step 1

在每個app的gradle文件中加入依賴:
dependencies {
compile 'xiaofei.library:hermes-eventbus:0.1.1'
}

Step 2

選擇一個app作為主app。你可以選擇任意app作為主app,但最好選擇那個存活時間最長的app。

在使用DroidPlugin的時候,你可以把宿主app作為主app。

在主app的AndroidManifest.xml中加入下面的service:
<service android:name="xiaofei.library.hermes.HermesService$HermesService0"/>

你可以加上一些屬性。

Step 3

在app間收發的事件類必須有相同的包名、相同的類名和相同的方法。

務必記住在代碼混淆的時候將這些類keep!!!

Step 4

在主app的application類的onCreate方法中加入:
HermesEventBus.getDefault().init(this);

在其他app的Application類的onCreate方法中加入:
HermesEventBus.getDefault().connectApp(this, packageName);

「packageName」指的是主app的包名。

Step 5

每次使用EventBus的時候,用HermesEventBus代替EventBus。
HermesEventBus.getDefault().register(this);
HermesEventBus.getDefault().post(new Event());

HermesEventBus也能夠在一個進程間傳遞event,所以如果你已經使用了HermesEventBus,那麼就不要再使用EventBus了。

『叄』 Android開發中在哪些場合下會需要使用AIDL

嚴格來說,線程是共享資源的,所以線程之間是不存在通信的,Android裡面的Handle是用來解決非同步調用的,這個觀念很重要,想明白了,代碼也就寫的更合理了。
進程之間內存等資源是隔離的,而AIDL,是Android提供的跨進程通信IPC工具Binder的具體使用方法,跟其他Linux跨進程通信(socket,管道,能存共享等)在概念上沒啥差。所以要實現跨進程的內存訪問(比如數據傳輸,函數跨進程同步調用等)就需要了AIDL了,當然了AIDL並不是Android中跨進程通信的唯一選擇,socket(systemServer進程與zygote進程,pkms調用install進程,MountService與vold進程通信都是通過socket),共享內存(sqlite3查詢就用了)等都可以用的,但是沒有Binder通過AIDL好用罷了。

『肆』 基於aidl跨進程通信的實現原理是怎樣的

一、概述:跨進程通信(AIDL),主要實現進程(應用)間數據共享功能。

二、實現原理:

1、伺服器端實現:

(1)目錄結構,如下圖:

三、注意事項:進程間傳遞對象必需實現Parcelable或Serializable介面

『伍』 android開發中跨進程通信有幾種方式

  • 在android SDK中提供了4種用於跨進程通訊的方式,Activity、Content Provider、Broadcast和Service。

  • 介紹

  1. Activity可以跨進程調用其他應用程序;

  2. Content Provider可以跨進程訪問其他應用程序中的數據;

  3. Broadcast可以向android系統中所有應用程序發送廣播;

  4. Content Provider返回的是Cursor對象,而Service返回的是java對象,這種可以跨進程通訊的服務叫AIDL服務;

『陸』 Android跨進程通信如何保證數據安全

可以把數據經過對稱加密後再發到伺服器,例如用RSA ADE DES等加密方式,Https 就是用RSA加密方式的。

『柒』 Android跨進程通信之AIDL機制和廣播機制的異同

http://blog.csdn.net/java_xxoo_android/article/details/46352445

『捌』 為什麼activity和service的通信是進程間通信

Android為了屏蔽進程的概念,利用不同的組件[Activity、Service]來表示進程之間的通信!組件間通信的核心機制是Intent,通過Intent可以開啟一個Activity或Service,不論這個Activity或Service是屬於當前應用還是其它應用的。一、Intent包含兩部分: 1、目的[action]--要往哪裡去 2、內容[category、data]--路上帶了些什麼,區分性數據或內容性數據二、Intent類型: 1、顯式--直接指定消息目的地,只適合同一進程內的不同組件之間通信new Intent(this,Target.class) 2、隱式--AndroidMainifest.xml中注冊,一般用於跨進程通信new Intent(String action)IPC機制:有了Intent這種基於消息的進程內或進程間通信模型,我們就可以通過Intent去開啟一個Service,可以通過Intent跳轉到另一個Activity,不論上面的Service或Activity是在當前進程還是其它進程內即不論是當前應用還是其它應用的Service或Activity,通過消息機制都可以進行通信!

『玖』 為什麼android要使用跨進程通信

因為當不同的應用之間需要查詢數據的時候,每個應用在不同的進程內,不能直接訪問另外一個進程的內存數據,就需要使用進程間通信了
比如你想獲得通訊錄里的聯系人列表,就只能給通訊錄應用發送請求來獲取,這就是進程間通信

『拾』 Android 進程間通信的幾種實現方式

Android 進程間通信的幾種實現方式

主要有4種方式:

這4種方式正好對應於android系統中4種應用程序組件:Activity、Content Provider、Broadcast和Service。

主要實現原理:

由於應用程序之間不能共享內存。為了在不同應用程序之間交互數據(跨進程通訊),AndroidSDK中提供了4種用於跨進程通訊的方式進行交互數據,實現進程間通信主要是使用sdk中提供的4組組件根據實際開發情況進行實現數據交互。

詳細實現方式:

Acitivity實現方式

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

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


Content Provider實現方式

Android應用程序可以使用文件或SqlLite資料庫存儲數據。Content Provider提供了一種在多個應用程序之間數據共享的方式(跨進程共享數據)

應用程序可以利用Content Provider完成下面的工作

1. 查詢數據
2. 修改數據
3. 添加數據
4. 刪除數據

Broadcast 廣播實現方式

廣播是一種被動跨進程通訊的方式。當某個程序向系統發送廣播時,其他的應用程序只能被動地接收廣播數據。這就象電台進行廣播一樣,聽眾只能被動地收聽,而不能主動與電台進行溝通。在應用程序中發送廣播比較簡單。只需要調用sendBroadcast方法即可。該方法需要一個Intent對象。通過Intent對象可以發送需要廣播的數據。


Service實現方式

常用的使用方式之一:利用AIDL Service實現跨進程通信

這是我個人比較推崇的方式,因為它相比Broadcast而言,雖然實現上稍微麻煩了一點,但是它的優勢就是不會像廣播那樣在手機中的廣播較多時會有明顯的時延,甚至有廣播發送不成功的情況出現。

注意普通的Service並不能實現跨進程操作,實際上普通的Service和它所在的應用處於同一個進程中,而且它也不會專門開一條新的線程,因此如果在普通的Service中實現在耗時的任務,需要新開線程。

要實現跨進程通信,需要藉助AIDL(Android Interface Definition Language)。Android中的跨進程服務其實是採用C/S的架構,因而AIDL的目的就是實現通信介面。


總結

跨進程通訊這個方面service方式的通訊遠遠復雜於其他幾種通訊方式,實際開發中Activity、Content Provider、Broadcast和Service。4種經常用到,學習過程中要對沒種實現方式有一定的了解。

熱點內容
王朝腳本 發布:2025-01-14 03:26:08 瀏覽:174
dcloud源碼 發布:2025-01-14 03:26:00 瀏覽:300
梅林IPTV腳本 發布:2025-01-14 03:23:46 瀏覽:632
c語言if語句執行順序 發布:2025-01-14 03:22:19 瀏覽:989
浙江大學c語言答案 發布:2025-01-14 03:18:53 瀏覽:665
vivo查看緩存 發布:2025-01-14 03:10:46 瀏覽:618
flashlinux插件 發布:2025-01-14 03:10:44 瀏覽:368
編譯原理四元式系統特色 發布:2025-01-14 03:08:54 瀏覽:476
sqlserverpivot 發布:2025-01-14 03:01:49 瀏覽:944
電腦伺服器雲盤 發布:2025-01-14 03:01:40 瀏覽:84