Hermes功能简介

简介

  • 饿了么飞神开发的Android 进程间通信IPC框架。

功能

  • Android 进程间通信IPC(IPC,Inter-Process Communication,进程间通信)框架,让不同进程之间通信对开发近乎透明,像调用本地进程的函数和单例一样调用其他进程的函数和单例。

特色

  • 使得进程间通信像调用本地函数一样方便简单。

  • 轻而易举在本地进程创建其他进程类的对象,轻而易举在本进程获取其他进程的单例,轻而易举在本进程使用其他进程的工具类。

  • 支持进程间函数回调,调用其他进程函数的时候可以传入回调函数,让其他进程回调本进程的方法。

  • 自带内存优化。Hermes内置两个垃圾回收器,本地进程在远端进程创建的实例和本地进程传给远端进程的回调接口会被自动回收

解决的问题域

  • app的不同功能或者bundle分布在不同进程中,这种情况下分进程如果想获得主进程的单例或者工具类,或者使用主进程的功能,就会显得比较困难,Hermes封装了这种困难性。
  • 插件开发中,不同插件往往是作为独立apk开发的,不同插件可能运行在不同进程,这种情况下,为了实现解耦的目的,使用Hermes就可以达到目的,只需要分进程的插件实现对应主工程类的接口就行。

具备的功能

  • 获取别的进程的单例,比如主进程定义了一个单例类Singleton,使用方法:
@ClassId(“Singleton”)
public class Singleton {

    private static Singleton sInstance = null;

    private volatile String mData;

    private Singleton() {
        mData = new String();
    }

    public static synchronized Singleton getInstance() {
        if (sInstance == null) {
            sInstance = new Singleton();
        }
        return sInstance;
    }

  @MethodId(“setData”)
    public void setData(String data) {
        mData = data;
    }

    @MethodId(“getData”)
    public String getData() {
        return mData;
    }
}

如果不使用Hermes,单例是无法共享的。

假设单例在进程A中,进程B想访问这个单例。那么你写如下接口:

@ClassId(“Singleton”)
public interface ISingleton {

    @MethodId(“setData”)
    void setData(String data);

    @MethodId(“getData”)
    String getData();
}

进程B使用单例的时候,代码如下:

//obtain the instance of Singleton
ISingleton singleton = Hermes.getInstance(ISingleton.class);

//Set a data
singleton.setData(“Hello, Hermes!”);

//Get the data
Log.v(TAG, singleton.getData());
  • 创建实例
    • 进程B中,创建进程A中的实例有三种方法:Hermes.Hermes.newInstance(Class, Object...)、getInstance(Class, Object...)和Hermes.getUtilityClass()。分别是生成实例,获取实例(特别适合获取单例),获取单例类。
  • 进程B调用进程A的函数,可以传入回调函数,供进程A来在进程B进行回调操作,该回调函数必须是一个接口。

你可能感兴趣的:(Hermes功能简介)