- Ваша служба может отправлять «Сообщения» в свою активность
Messenger
, чтобы заставить ее реагировать, как только служба обнаруживает новый контент (см. в этом разделе справки Android-разработчиков об активности / обмене сообщениями в службах).).
Вот примеры двусторонних сообщений (от Сервиса к Активности и от Активности к Сервису).Цитируя документ:
Вы можете увидеть пример того, как обеспечить двусторонний обмен сообщениями в MessengerService.java (служба) и MessengerServiceActivities.java (клиент) образцы.
Вот соответствующие части.
Входящий обработчик в действии:
/**
* Activity Handler of incoming messages from service.
*/
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MessengerService.MSG_SET_VALUE:
mCallbackText.setText("Received from service: " + msg.arg1);
break;
default:
super.handleMessage(msg);
}
}
}
/**
* Activity target published for clients to send messages to IncomingHandler.
*/
final Messenger mMessenger = new Messenger(new IncomingHandler());
В сервисе показаны только соответствующие части:
/**
* Handler of incoming messages from clients.
*/
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
//obtain Activity address from Message
Messenger mClient=msg.replyTo;
try {
// try to send it some mValue
mClient.send(Message.obtain(null,MSG_SET_VALUE, mValue, 0));
} catch (RemoteException e) {
// The client is dead. Remove it
mClient=null;
}
}
}
/**
* Target we publish for clients to send messages to IncomingHandler.
*/
final Messenger mMessenger = new Messenger(new IncomingHandler());
- Также вы можете
bind
к вашему сервису из вашей деятельности и периодически вызывать один из ваших сервисных методов для проверки нового контента.Для этого, если ваш сервис является другим приложением, вы должны использовать aidl (это сложнее).Если он находится в том же пакете, я советую вам использовать гораздо более легкую ' привязку локальной службы '