经过一些研究,我发现在我的情况下发送和接收广播的时间如下。我在同一过程中有服务。
sendBroadcast(如果两个组件在同一进程中,则不推荐)34 秒
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 接近 30 秒
使用 AIDL 和 RemoteCallbackList 实现
将适用于相同的进程或不同的进程
为您服务
public final RemoteCallbackList<ICallBackAidl> mDMCallbacks = new RemoteCallbackList<ICallBackAidl>();
public void registerDMCallback(ICallBackAidl cb) {
Logger.d(LOG_TAG, "registerDMCallback " + cb);
if (cb != null)
mDMCallbacks.register(cb);
}
当您需要从服务中调用 Application/Acitvity 中的方法时
public void callMehodsInApplication() {
final int N = mDMCallbacks.beginBroadcast();
for (int i = 0; i < N; i++) {
try {
mDMCallbacks.getBroadcastItem(i).method1();
} catch (RemoteException e) {
e.printStackTrace();
}
}
mDMCallbacks.finishBroadcast();
}
在您的类中扩展应用程序或活动。
private ISyncmlServiceDMCallback mCallback = new ISyncmlServiceDMCallback.Stub() {
// Implement callback methods here
public void method1() {
// Service can call this method
}
}
public void onServiceConnected(ComponentName name, IBinder service) {
svc.LocalBinder binder = (svc.LocalBinder) service;
mSvc = binder.getService();
mSvc.registerDMCallback(mCallback);
}
以这种方式调用几乎是从同一进程广播和接收的瞬间