Skip to content

接入IPCInvoker

Albie Liang edited this page Nov 29, 2018 · 6 revisions

引入组件库

IPCInvoker组件库已经提交到jcenter上了,可以直接dependencies中配置引用

dependencies {
    compile 'cc.suitalk.android:ipc-invoker:<last-version>'
}

在项目中使用

定义远端进程Service

这里以PushProcessIPCService为示例,代码如下:

public class PushProcessIPCService extends BaseIPCService {

    public static final String PROCESS_NAME = "cc.suitalk.ipcinvoker.sample:push";

    @Override
    public String getProcessName() {
        return PROCESS_NAME;
    }
}

在manifest.xml中配置service

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cc.suitalk.ipcinvoker.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service
            android:name=".service.PushProcessIPCService"
            android:process=":push"
            android:exported="false"/>
    </application>
</manifest>

初始化IPCInvoker

这里需要在你的项目所有需要支持跨进程调用的进程中调用IPCInvoker.setup(Application, IPCInvokerInitDelegate)方法,并在传入的IPCInvokerInitDelegate接口实现中,将该进程需要支持访问的远端进程相应的Service的class添加到IPCInvoker当中,示例如下:

public class IPCInvokerApplication extends Application {

    private static final ILogPrinter sLogPrinter = new DefaultLogPrinter();
    
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize IPCInvoker
        IPCInvoker.setup(this, new DefaultInitDelegate() {
            
            @Override
            public void onInitialize(IPCInvokerInitializer initializer) {
                initializer.setLogPrinter(sLogPrinter);
                initializer.setExecutorServiceCreator(new ExecutorServiceCreator() {
                    @Override
                    public ExecutorService create() {
                        return new ScheduledThreadPoolExecutor(5);
                    }
                });
            }
            
            @Override
            public void onAttachServiceInfo(IPCInvokerInitializer initializer) {
                initializer.addIPCService(PushProcessIPCService.PROCESS_NAME, PushProcessIPCService.class);
            }

            @Override
            public void onAddTypeTransfer(TypeTransferInitializer initializer) {
                super.onAddTypeTransfer(initializer);
                initializer.addTypeTransfer(new TestTypeTransfer());
            }
        });
    }
}

通过IPCInvokerInitializer可以自定义Log输出,IPCInvoker Task执行的线程池,还可以定制类型转换器TypeTransfer。

到此为止IPCInvoker引入已经完成,可以直接在项目中使用IPCInvoker的跨进程调用接口了。

Clone this wiki locally