2014-01-05 2 views
0

Мне было интересно, есть ли способ привязать абстрактный класс к сервису?Android Binding Abstract Class to Service

У меня есть Служба, которая открывает новую тему и связывается с сервером Socket.IO Node.js. Я хотел бы создать абстрактный класс, который содержит привязку к службе, посланникам и обработчикам, чтобы ее можно было использовать в нескольких приложениях. Цель состоит в том, что я могу создать и Object этого абстрактного класса, и просто нужно переопределить onWh независимо от функций, вызываемых на основе любого сообщения, которое сервер отправляет обратно.

Если у меня есть, я могу просто сделать public abstract void bindToService(); и переопределить его в любом действии, использующем этот класс, но я бы предпочел сделать его приватным методом для абстрактного класса и вызвать его при инициализации объекта , Есть ли способ достичь этого?

Заранее спасибо за любую помощь ...

ответ

0

Вам необходимо переопределить метод onBind() на службе, и вернуть реализацию интерфейса IBinder, который может быть сам Service класса. Затем вы можете позвонить bindService() из любого Activity, передавая реализацию интерфейса прослушивателя ServiceConnection, который будет вызываться обратно с IBinder. Вы можете использовать это для взаимодействия с Service. Вы можете узнать больше о том, как реализовать Service, связывая это с API docs.

+0

Я понимаю, как Activity привязывается к службе, я хотел знать, есть ли способ привязать абстрактный класс (не активность) к службе. Таким образом, Activity имеет частный класс, который расширяет абстрактный класс, и когда объект инициализирован, он связан. – nathansizemore

+1

@ w3rthl3ss: 'Сервис может быть привязан только к компонентам приложения. Если вы хотите реализовать логику привязки в другом классе, вам нужно будет передать ссылку на ваш «Активность» или «Приложение». Вероятно, вам нужна реализация 'ServiceConnection', которая автоматически будет получать обратные вызовы, когда« Служба »будет подключена или отключена, и сможет взаимодействовать с ней через« IBinder ». – corsair992

+0

Мне удалось решить эту проблему, используя «WeakReference» для Activity в классе «Конструктор». Как и ваш комментарий выше. – nathansizemore