EasyMessenger ====== "直達Github項目地址" 一款用於Android平臺的基於Binder的進程間通信庫,採用 生成IPC通信需要的代碼。 相對於 具備如下優勢: 採用Java聲明介面,更方便 介面方法支持重載 同時支持同步和非同步通信 目前支持如下數據類型: boolean ...
EasyMessenger
一款用於Android平臺的基於Binder的進程間通信庫,採用annotationProcessor
生成IPC通信需要的代碼。EasyMessenger
相對於AIDL
具備如下優勢:
- 採用Java聲明介面,更方便
- 介面方法支持重載
- 同時支持同步和非同步通信
EasyMessenger
目前支持如下數據類型:
- boolean, byte, char, short, int, long, float, double
- boolean[], byte[], char[], int[], long[], float[], double[]
- String, String[]
- Parcelable, Parcelable[]
- Serializable
- ArrayList
- enum(需要實現parcelable)
下載
implementation 'cn.zmy:easymessenger-lib:0.1'
annotationProcessor 'cn.zmy:easymessenger-compilier:0.1'
開始使用
Client
聲明介面:
@BinderClient
public interface ClientInterface
{
int add(int num1, int num2);
}
build之後,會生成ClientInterfaceHelper
類,開發者也正是通過這個Helper類進行IPC通信。
//使用之前需要初始化
ClientInterfaceHelper.instance.__init(context,
new ComponentName("{server_package}", "{server_service_name}"));
//同步IPC調用
int result = ClientInterfaceHelper.instance.add(1, 2);
//非同步IPC調用
ClientInterfaceHelper.instance.addAsync(1, 2, new IntCallback()
{
@Override
public void onSuccess(int result)
{
//調用成功
}
@Override
public void onError(Exception ex)
{
//調用失敗
}
});
Server
實現介面:
@BinderServer
public class FunctionImpl
{
//必須是pubic
//方法名稱、參數數量、類型、順序必須和client的介面一致
public int add(int num1, int num2)
{
}
}
build之後會生成FunctionImplBinder
,將這個Binder和Service綁定:
public class ServerService extends Service
{
@Override
public IBinder onBind(Intent intent)
{
return new FunctionImplBinder(new FunctionImpl());
}
}