Объясните как работают sticky intent?
Я понимаю что происходит при регистрации BroadcastReceiver, при sendBroadcast и т.д.
Но вот, например, в книге есть такое пример:
IntentFilter batIntentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent battery = context.registerReceiver(null, batIntentFilter);
int status = battery.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = ((status == BatteryManager.BATTERY_STATUS_CHARGING) || (status == BatteryManager.BATTERY_STATUS_FULL));
Создается IntentFilter, дальше вызывается метод регистрации BroadcastReceiver, но вместо приемника ему передается null.
Ему должны передаваться BroadcastReceiver и IntentFilter для него - для регистрации.
Но, как я понял из документации, если передать null вернется sticky intent. И что он делает? Зачем он? Как он применяется?
Ответ
Система может "выбрасывать" sticky и обычные интенты. Обычные интенты срабатывают когда произошло какое то событие, но после регистрации на это события. Sticky интент, в случае если он уже сработал, будет доставлен сразу же после регистрации на это событие, другими словами если какое то событие уже произошло, то после регистрации на него оно сразу же доставится receiver'y. Если в метод registerReceiver передать null в качестве receiver, то в случае со sticky сразу же будет возвращен intent с информацией о событии, но без последующей регистрации для него. В вашем случае ACTION_BATTERY_CHANGED является sticky и поэтому вам будет сразу возвращен intent с информацией и состоянии батареи, но без регистрации на это событие.
Комментариев нет:
Отправить комментарий