Как может Служба Android знать, что она не связана с какой-либо деятельностью

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

По сути Сервис слушает изменения на удаленном сервере, и я хотел бы генерировать уведомление тогда и только тогда, когда действие из приложения не работает (или видимо). Другими словами, я не хочу, чтобы уведомления возникали, когда Пользователь напрямую взаимодействует с приложением.

В случае, когда Пользователь напрямую взаимодействует с приложением, Служба уведомляет об активности и обновляет соответствующие элементы пользовательского интерфейса на основе изменений. Я планирую реализовать это через шаблон Observer.

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

Спасибо, J

Ответы

Ответ 1

Как может Служба знать, если ни одна из приложения. Действия связаны с ним?

Вы знаете, нет ли ограничений Activities, если ваш список Observer пуст.

Ответ 2

Вам нужно использовать логическое значение с методами onBind, onUnbind и onRebind:

public boolean bound;

@Override
public Binder onBind(Intent intent){
    bound = true;
    return myBinder; //declare and init your binder elsewhere
}

@Override
public boolean onUnbind(Intent intent) {
    bound = false;
    return true; // ensures onRebind is called
}

@Override
public void onRebind(Intent intent) {
    bound = true;
}

onUnbind вызывается только тогда, когда все клиенты отключены. Таким образом, связанный останется истиной, пока все клиенты не отключится.

** ПРИМЕЧАНИЕ. Отредактировано на основе отзывов от Gil. **

Ответ 3

Я не могу комментировать ответ SharkAlley, поэтому я воспроизвожу здесь.

К сожалению, onBind() не поддерживается не при каждом подключении клиента. См. Например, миссис Хакборн, здесь: https://groups.google.com/d/msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ

Возможное решение - вернуть true из onUnbind() и установить флаг в true как на onBind(), так и на onRebind() (и false на onUnbind()).