-
Notifications
You must be signed in to change notification settings - Fork 20
跨进程事件IPCDispatcher与IPCObservable
Albie Liang edited this page May 23, 2020
·
7 revisions
public class OnClickEventDispatcher extends IPCDispatcher<Bundle> {
}
因为在做跨进程事件分发时使用的是Dispatcher的class name作为key所以dispatcher只需要继承IPCDispatcher即可。
final IPCObserver<Bundle> observer1 = new IPCObserver<>() {
@Override
public void onCallback(final Bundle data) {
String log = String.format("register observer by Observable, onCallback(%s),
cost : %s", data.getString("result"),
(System.nanoTime() - data.getLong("timestamp")) / 1000000.0d);
Log.i(TAG, log);
}
};
IPCObservable<Bundle> observable = new IPCObservable<>("cc.suitalk.ipcinvoker.sample:push", OnClickEventDispatcher.class);
// 注册跨进程事件监听
observable.registerIPCObserver(observer1);
// 反注册跨进程事件监听
observable.unregisterIPCObserver(observer1)
OnClickEventDispatcher dispatcher = new OnClickEventDispatcher();
Bundle event = new Bundle();
event.putString("result", String.format("processName : %s, pid : %s",
IPCInvokeLogic.getCurrentProcessName(), android.os.Process.myPid()));
event.putLong("timestamp", System.nanoTime())
dispatcher.dispatch(event);
发布自定义数据结构
的跨进程事件,该数据结构需要实现IPCData接口(如:IPCSampleData)
public class IPCSampleData implements IPCData {
public String result;
public long timestamp;
@Override
public Bundle toBundle() {
Bundle bundle = new Bundle();
bundle.putString("result", result);
bundle.putLong("timestamp", timestamp);
return bundle;
}
@Override
public void fromBundle(Bundle bundle) {
result = bundle.getString("result");
timestamp = bundle.getLong("timestamp");
}
}
final IPCObserver<Bundle> observer1 = new IPCObserver<>() {
@Override
public void onCallback(final Bundle data) {
IPCSampleData result = new IPCSampleData();
result.fromBundle(data);
String log = String.format("register observer by client, onCallback(%s), cost : %s",
result.result, (System.nanoTime() - result.timestamp) / 1000000.0d);
Log.i(TAG, log);
}
};
IPCObservable<Bundle> observable = new IPCObservable<>("cc.suitalk.ipcinvoker.sample:push", OnClickEventDispatcher.class);
// 注册跨进程事件监听
observable.registerIPCObserver(observer1)
OnClickEventDispatcher dispatcher = new OnClickEventDispatcher();
IPCSampleData event = new IPCSampleData();
event.result = String.format("processName : %s, pid : %s", IPCInvokeLogic.getCurrentProcessName(), android.os.Process.myPid());
event.timestamp = System.nanoTime();
dispatcher.dispatch(event);