我们使用广播来传达远程服务和UI之间的状态变化。 这样做,我们发现了一个非常奇怪的行为:有时(我找不到任何线索,为什么)这些广播延迟了8s左右。
我们如何发送它们(非常基本, mState只是一个枚举)(远程进程在服务中):
Intent intent = new Intent();
intent.setAction(ACTION_STATE_CHANGED);
intent.putExtra(EXTRA_STATE, mState);
Service.get().sendBroadcast(intent, null);
静态接收器的注册方式(App):
接收器类(App):
public class ServiceStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("State", "State via static received");
}
}
现在有时会延迟(总是针对相同的州)
州枚举:
public enum State {
DISCONNECTED,
BT_DISABLED,
BT_SCANNING,
BT_TIMEOUT,
BT_FAILURE,
BT_LOCATION_NEEDED,
CONNECTING,
ACTIVATION_FAILURE,
VIN_NEEDED,
CAR_MODEL_NEEDED,
MILEAGE_NEEDED,
READY,
IGNITION_OFF,
IGNITION_ON;
@Override
public String toString() {
return name();
}
}
现在出现了一个奇怪的部分:如果我注册一个动态接收器,我们总会立即收到所有广播。 静态的还有那么大的延迟。 如果我通过sendOrderedBroadcast发送广播BOTH(静态和动态)有此延迟。
动态接收器:
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("State", "State via dynamic received");
}
}, new IntentFilter(State.ACTION_STATE_CHANGED));
到目前为止我尝试了什么:
从主线程/工作线程发送广播(没有改变)
使用权限属性播放(没有更改)
连续多次发送广播(不改变任何内容,现在只获得多个延迟广播)
另外:没有来自logcat的输出似乎相关。 试用不同的设备(OnePlus 3 7.1.1,Z3 6.0.1,S7 Edge 7.1.1),都表现出相同的行为