Купить нирдош23.08.2017Итак, все готово к запуску. Не забудьте перед запуском клиента отправить службу в эмулятор. Давайте-ка посмотрим, что мы имеем. Как и ранее, осуществляется привязка к службе, после чего можно обращаться к какому-нибудь ее методу. Полезно взглянуть на составные части проектов службы и клиента, который к ней обращается. На рис. 15.10 показаны составные части проектов службы (слева) и клиента (справа) в Eclipse. Контракт между клиентом и службой состоит из сущностей AIDL и объектов Parcelable, которыми обмениваются стороны друг с другом. Именно по этой причине мы видим файлы Person. j ava, IStockQuoteService .aidl и Person. aidl на обеих сторонах. Поскольку компилятор AIDL генерирует Java-интерфейс, заглушку, прокси и т.п. из сущностей AIDL, после копирования составных частей контракта в клиентский проект процесс сборки создаст файл IStockQuoteService. java на стороне клиента. Теперь вы знаете, как обмениваться данными составных типов между службами и клиентами. Давайте кратко рассмотрим другой важный аспект обращения к службам: сравнение синхронного и асинхронного вызова служб. Купить нирдош можно здесь. Все вызовы служб являются синхронными. Это приводит к очевидному вопросу: должны ли все обращения к службам выполняться в рабочем потоке? Не обязательно. На большинстве других платформ общепринятым для клиента является трактовка службы как “черного ящика”, поэтому во время вызова службы клиент должен принять соответствующие меры предосторожности. В Android хорошо известно, что находится внутри службы (в основном потому, что вы сами ее реализовали), и это позволяет принимать более осмысленное решение. Если вы знаете, что вызываемый метод выполняет отнимающую длительное время работу, то можете предусмотреть использование вторичного потока для инициации вызова. Если известно, что метод не имеет никаких “узких мест”, его можно безопасно вызвать в потоке пользовательского интерфейса. Если вы решили, что обращение к службе в рабочем потоке будет более эффективным, можете создать поток и затем вызвать службу. После этого взаимодействуйте с результатом вызова в потоке пользовательского интерфейса.
|
|
|