Ответ 1
Это прекрасно. Broadcast передается ОС Android, и она фактически отправляется с использованием потоков ОС, поэтому ваш поток, который ее отправляет, не имеет значения.
У меня есть служба, которая создает поток. Этот поток выполняет некоторую работу, а затем вызывает sendBroadcast()
в Service
. Это означает, что sendBroadcast()
вызывается из рабочего потока, а не из потока, в котором работает служба.
Это нормально или я должен удостовериться, что sendBroadcast()
вызывается из того же потока, что и Service
(используя Handler
и Runnable
)?
Я нашел this в stackoverflow и Dianne Hackborns post.
Согласно сообщению, это должно быть хорошо. Причина, по которой я спрашиваю, состоит в том, что пост 2 года и, возможно, что-то изменилось. Также я не мог найти ничего об этом в документации по Android.
Это прекрасно. Broadcast передается ОС Android, и она фактически отправляется с использованием потоков ОС, поэтому ваш поток, который ее отправляет, не имеет значения.
Вы уже получили свой ответ, но, возможно, я могу добавить еще немного.
Кажется прекрасным называть это из нескольких потоков. Независимо от того, какой поток вы вызываете sendBroadcast(...)
, это метод onReceive, с которым он будет обращаться (как вы, вероятно, знаете). И по умолчанию он работает над потоком основного/пользовательского интерфейса вашего приложения. Вы можете изменить это поведение, но через registerReceiver(...)
Ему нравится использовать Messenger для соединения с клиентом. Помните все сообщения, независимо от того, из какого потока они отправляются, обрабатываются в одной очереди сообщений, которая потребляется/зацикливается по одному потоку.