В настоящее время у меня есть служба и вид деятельности в моем приложении.Android получает услугу для связи с деятельностью?
В настоящее время я связываю Службу с активностью, не используя AIDL, поскольку Служба и Деятельность находятся в одном приложении.
Это позволяет мне вызвать методы из Сервиса в пределах моей деятельности, когда я их требую, однако он не позволяет мне вызывать методы Activity из моей службы, когда захочу.
Может ли кто-нибудь прокомментировать, что было бы лучшим способом достичь этого?
Я мог бы использовать намерения, но есть ли альтернативный вариант?
Я хочу иметь плотную связь между Сервисом и Деятельностью, я хочу иметь возможность вызвать метод Activity из моей Службы, когда происходит событие.
Благодаря ognian за отличный совет.
EDIT 2:
теперь у меня это работает так, как я хочу, но я столкнулся с проблемой.
Мое обслуживание получает обновления статуса, и моя деятельность должна реагировать на обновление, отправленное с Сервиса.
Проблема заключается в том, что когда я начинаю свою деятельность, я получаю статус набора номера, а затем статус подключен до вызова onBind, и я получаю экземпляр iCallDialogActivity.
Следующий результат логарифма может сделать все более ясным.
06-28 10:56:48.702: DEBUG/TestPhone(3498): Status: EStatusDialling
06-28 10:56:48.751: DEBUG/TestPhone(3498): Status: EStatusConnected
06-28 10:56:49.122: DEBUG/TestPhone(3498): Status: onBind Called <-------------
06-28 10:56:49.141: DEBUG/TestPhone(3498): Status: iCallDialogActivity instance <-------------
06-28 10:56:51.641: DEBUG/TestPhone(3498): Status: EStatusDisconnecting
06-28 10:56:51.651: DEBUG/TestPhone(3498): Status: EStatusIdle
Мне нужно, чтобы иметь возможность использовать свой iCallDialogActivity, когда я получаю набор номера и подключаемым уведомлений о состоянии.
Но это дает мне исключение NullPointer из-за того, что оно не создается вовремя, когда начинается моя активность, привязка - это первое, что я делаю в своих действиях onCreate().
Есть ли способ заставить его немедленно связываться?
В коде Сервиса метод «public void setCallback» (ICallDialogActivity callDialogActivity) должен фактически установить глобальную ссылку Service на обратный вызов. Затем вы можете использовать его там, где это необходимо в Сервисе. Кроме того, вам нужно добавить метод removeCallback(), который вы вызовете в on-режиме Activity on(), иначе служба может в конечном итоге вызвать мертвую активность.Вы должны разработать это тщательно, потому что служба и активность имеют совершенно разные жизненные циклы. – ognian
Спасибо, Огромное спасибо, я внедрил это, и теперь у меня есть понимание того, что я должен делать, однако я столкнулся с другой проблемой и отредактировал свой пост соответственно, есть понимание моего нового вопроса? –