Где именно BroadcastReceivers может прерывать код? - PullRequest
0 голосов
/ 17 апреля 2020

В однопоточном Android приложении I registerReceiver для обновления некоторых глобальных переменных при выключении экрана.

Однако каждую минуту таймер запускает запуск блок кода, который я не хочу прерывать. Я знаю, что существуют инструменты "java .util.concurrent" для блокировки выполнения, чтобы сделать именно это, даже если бы я был многопоточным, но я бы хотел избежать этих сложностей, если есть какие-либо Android гарантии о том, где мой основной петлитель допускает прерывания.

Итак, чтобы помочь мне понять поведение по умолчанию, действует ли зарегистрированный получатель как можно скорее, чтобы переменные могли быть изменены где-нибудь в середине моего потока?

Если так Я могу легко вставить одну или две «блокирующие переменные» в код, чтобы уменьшить риск возникновения проблем, но принятие этого риска до 0% дает существенный компромисс производительности, если я сталкиваюсь с условиями гонки внутри своего класса. Таким образом, вместо этого я планирую использовать AtomicInteger (который также, конечно, имеет компромисс, но потенциально меньше, поскольку ОС Android может затем планировать прерывания в свете моих заданных требований atomi c ) для блокировки, если мне действительно нужен риск 0%. Или есть более простое решение для однопоточных приложений?

...