2014-01-05 3 views
0

나는 서비스에 추상 클래스를 바인딩하는 방법이 있는지 궁금 해서요?안드로이드 바인딩 서비스에 추상 클래스

새로운 스레드를 열고 Node.js Socket.IO 서버와 통신하는 서비스가 있습니다. 서비스, ​​메신저 및 핸들러에 대한 바인딩을 포함하는 추상 클래스를 만들어 여러 응용 프로그램에서 사용할 수 있도록하겠습니다. 의도는이 추상 클래스의 객체를 만들고 만들 수 있으며 서버가 보낸 메시지를 기반으로 호출되는 함수를 재정의해야한다는 것입니다.

내가해야 할 일은 public abstract void bindToService();을 만들고 Activity가이 클래스를 사용하는 모든 작업에서 재정의 할 수 있지만이를 추상적 클래스의 전용 메서드로 만들고 개체가 초기화 될 때 호출하도록하는 것이 좋습니다. . 이것을 달성 할 수있는 방법이 있습니까? 사전에 어떤 도움

덕분에 ...

답변

0

당신은 서비스에 onBind() 메소드를 오버라이드 (override)하고 Service 클래스 자체가 될 수 IBinder 인터페이스의 구현을 반환해야합니다. 그런 다음 ActivitybindService()ServiceConnection 수신기 인터페이스의 구현을 전달하여 IBinder으로 다시 호출 할 수 있습니다. 이를 사용하여 Service과 상호 작용할 수 있습니다. 구현 방법에 대한 자세한 내용은 API docs에서 확인할 수 있습니다.

+0

액티비티가 서비스에 바인딩하는 방법을 이해합니다. 액티비티가 아닌 추상 클래스를 서비스에 바인딩하는 방법이 있는지 알고 싶었습니다. 그런 식으로 액티비티는 추상 클래스를 확장하는 private 클래스를 가지며, Object가 초기화되면 바인딩됩니다. – nathansizemore

+1

@ w3rthl3ss :'서비스'는 애플리케이션 구성 요소에만 바인딩 할 수 있습니다. 다른 클래스에 바인딩 논리를 구현하려면 'Activity'또는 'Application'에 대한 참조를 전달해야합니다. 당신이 원한 것은'ServiceConnection' 구현입니다. 이것은'Service'가 연결되거나 연결이 끊어 졌을 때 자동으로 콜백을 수신 할 것이고,'IBinder'를 통해 그것과 상호 작용할 수 있습니다. – corsair992

+0

저는 '생성자'클래스의 Activity에 WeakReference를 사용하여이를 해결했습니다. 위의 의견과 유사합니다. – nathansizemore

관련 문제