Приемники Android Broadcast: Могут ли они работать одновременно или они всегда выполняются последовательно? - PullRequest
2 голосов
/ 07 августа 2011

У меня небольшая путаница с приемниками вещания. У меня есть широковещательный приемник, который срабатывает при действиях TIME_SET и TIMEZONE_CHANGED (код приведен ниже). Мне было интересно, может ли OnDateTimeChanged (см. Код ниже) запускаться одновременно (и его выполнение перекрывается), когда запускаются действия TIME_SET и TIMEZONE_CHANGED или одно всегда будет запускаться после другого? Основываясь на некоторых простых экспериментах, которые я провел, у меня сложилось впечатление, что два выполнения OnDateTimeChanged запускаются последовательно без временного наложения, но я не могу быть на 100% уверен в этом. Если у кого-то есть идея, я буду очень счастлив.

<!-- Excerpt from manifest -->
<receiver android:name=".OnDateTimeChanged">
    <intent-filter>
        <action android:name="android.intent.action.TIME_SET"/>
        <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
    </intent-filter>
</receiver>


// Broadcast receiver class
public class OnDateTimeChanged extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Do some work here
    }
}

Кстати, и TIME_SET, и TIMEZONE_CHANGED могут быть активированы, когда в меню «Настройки - Дата и время» вы переключаетесь в автоматический режим, и это меняет как время, так и часовой пояс.

-Ali

1 Ответ

0 голосов
/ 07 августа 2011

По логике все они будут выполняться одновременно. Физически только один может занимать ядро ​​одновременно и может закончить до того, как начнется другое. При идентичных условиях поведение может показаться согласованным. Сама документация описывает это так: «Все приемники вещания работают в неопределенном порядке, часто в одно и то же время».

Если вы хотите дать другим получателям возможность работать, вы можете вызвать Thread.yield ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...