# IPCProject
**Repository Path**: smarkWzp/IPCProject
## Basic Information
- **Project Name**: IPCProject
- **Description**: 一个基于aidl实现的IPC进程间通讯框架,可以帮你从繁琐复杂的进程间通讯和aidl代码中解脱!
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-05-15
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
1. # IPCProject
一个基于aidl实现的IPC进程间通讯框架,可以帮你从繁琐复杂的进程间通讯和aidl代码中解脱!
框架使用:
```
implementation project(":sk_ipc")
```
使用步骤:
1、创建自己的数据提供服务并注册,同时注册框架提供的IPCService及其是使用的服务子类用于通讯,并确保和你自己的服务处于同一个进程,如下:
```
```
DataService为你所需要提供数据的服务进程。
2、创建你提供的数据接口和其实现类,并使用框架提供的@serviceId注解进行标识,同时传入相同的serviceId,注意:数据提供接口与实现类serviceId需要相同。并确保方法名相同,如下所示:
数据提供接口:
```
@ServiceId("DataProvider")
public interface IDataProvider {
DataBean getData();
DataBean getDataByUserId(int userId);
}
```
数据提供实现类:
```
@ServiceId("DataProvider")
public class DataProvider {
private List mList;
private static DataProvider instance;
DataProvider() {
mList = new ArrayList<>();
}
public static DataProvider getInstance() {
if (null == instance) {
synchronized (DataProvider.class) {
if (null == instance) {
instance = new DataProvider();
}
}
}
return instance;
}
public void setDataBean(DataBean dataBean) {
mList.add(dataBean);
}
public DataBean getData() {
DataBean dataBean = null;
if (mList.size() > 0) {
dataBean = mList.get(0);
} else {
dataBean = new DataBean(1, "小华", 25);
}
return dataBean;
}
public DataBean getDataByUserId(int userId) {
DataBean dataBean = null;
if (mList.size() > 0) {
for (int i = 0; i < mList.size(); i++) {
if (mList.get(i).userId == userId) {
return mList.get(i);
}
}
return new DataBean(userId, "晓龙", 32);
}
return new DataBean(userId, "晓龙", 32);
}
}
```
3、在自己的数据提供服务内进行注册并启动你的服务进程:
```
SkIPC.register(DataProvider.class);
```
```
startService(new Intent(this, DataService.class));
```
至此,服务端便搞定了,接下来看客户端:
同一APP内多进程通讯:
首先进行服务绑定:
```
SkIPC.connect(this, IPCService.IPCService0.class);
```
接下来就是与服务端进行通讯了:
```
IDataProvider provider =SkIPC.getInstanceWithNormal(IPCService.IPCService0.class,IDataProvider.class);
Toast.makeText(this,provider.getDataByUserId(1).toString(),Toast.LENGTH_SHORT).show();
```
不同app内通讯(传参获取数据):
绑定需要填入服务端包名:
```
SkIPC.connect(this, "com.sk.ipcdemo",IPCService.IPCService0.class);
```
数据获取:
```
IDataProvider provider =SkIPC.getInstanceWithNormal(IPCService.IPCService0.class,IDataProvider.class);
Toast.makeText(this,provider.getData().toString(),Toast.LENGTH_SHORT).show();
```
注意:在不同app内通讯需要保证两边的数据提供接口与数据bean类保持一致就可以了,PS:不用在于aidl中蛋疼的包名问题啦!
想要使用的同学可以下载demo自己跑跑看,测试下,如果觉得好用的话,随手点个star吧!!!