Как служба Android может узнать, что она не связана с какими-либо действиями - PullRequest
13 голосов
/ 05 июня 2010

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

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

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

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

Спасибо, J

Ответы [ 2 ]

25 голосов
/ 13 января 2012

Вам необходимо использовать логическое значение с методами 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 вызывается только тогда, когда все клиенты отключены. Таким образом, bound будет оставаться true , пока все клиенты не отключатся.

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

11 голосов
/ 11 июля 2013

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

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

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

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