Подтвердить что ты не робот

Можно ли вызвать sendBroadcast() из другого потока?

У меня есть служба, которая создает поток. Этот поток выполняет некоторую работу, а затем вызывает sendBroadcast() в Service. Это означает, что sendBroadcast() вызывается из рабочего потока, а не из потока, в котором работает служба.

Это нормально или я должен удостовериться, что sendBroadcast() вызывается из того же потока, что и Service (используя Handler и Runnable)?

Я нашел this в stackoverflow и Dianne Hackborns post.

Согласно сообщению, это должно быть хорошо. Причина, по которой я спрашиваю, состоит в том, что пост 2 года и, возможно, что-то изменилось. Также я не мог найти ничего об этом в документации по Android.

4b9b3361

Ответ 1

Это прекрасно. Broadcast передается ОС Android, и она фактически отправляется с использованием потоков ОС, поэтому ваш поток, который ее отправляет, не имеет значения.

Ответ 2

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

Кажется прекрасным называть это из нескольких потоков. Независимо от того, какой поток вы вызываете sendBroadcast(...), это метод onReceive, с которым он будет обращаться (как вы, вероятно, знаете). И по умолчанию он работает над потоком основного/пользовательского интерфейса вашего приложения. Вы можете изменить это поведение, но через registerReceiver(...)

Ему нравится использовать Messenger для соединения с клиентом. Помните все сообщения, независимо от того, из какого потока они отправляются, обрабатываются в одной очереди сообщений, которая потребляется/зацикливается по одному потоку.