基于JSON RPC的一种Android跨进程调用解决方案了解一下?
简介
今天上午,看票圈有朋友分享爱奇艺的跨进程通信框架——Andromeda,觉的还是有点意思的。
以前项目中用到跨进程这种解决方案比较少,今天看了下Andromeda,发现调用方式很简单。
恰好最近一年都是在做后端工作,想到了Json RPC的方案,其实Android跨进程接也是一种rpc调用方式,那么参考json rpc协议,通过aidl通道也可以很简单一种跨进程通信方式,而且使用方式也很简单。
说干就干,但是作为了高级程序员,肯定要给项目起个名字高大上的名字——Bifrost(彩虹桥),参考复联电影雷神上面的彩虹桥,寓意可以传送到各地,也表达Android跨进程通信可以畅通无阻。
使用方式
在Android系统的跨进程调用需要用到AIDL方式,但是呢,操作起来非常麻烦,可以传递基本类型,如果需要自定义类,那么还需要实现Parcelable
接口,同时也要写不少代码,操作起来繁琐。
像平常一样,先定义一个接口和实现类就行了。
public interface INumberApi {
int add(int a, int b);
}
public class NumberApiImpl implements INumberApi {
@Override
public int add(int a, int b) {
return a + b;
}
}
注册下接口和实现类,因为暂时没有用到依赖注入工具,同时我也不想把功能做的很复杂,暂时手动注册吧,做注册前,先做好初始化工作。
Bifrost.getInstance().init(this);
Bifrost.getInstance().register(IUserApi.class, new UserApiImpl());
Bifrost.getInstance().register(INumberApi.class, NumberApiImpl.class);
Bifrost暂时支持2个注册方式,kv都是class类型,还有就是k是class,v是接口实现类的一个对象。
调用方式也很简单。
IUserApi userApi = Bifrost.getInstance().getRemoteInstance(IUserApi.class);
User user = userApi.login("admin", "123456");
Timber.i("user = %s", user);
INumberApi numberApi = Bifrost.getInstance().getRemoteInstance(INumberApi.class);
int ret = numberApi.add(1, 2);
Toast.makeText(getApplicationContext(), "1 + 2 = " + ret, Toast.LENGTH_LONG).show();