2010-03-19 4 views
7

저는 다른 프로세스에서 실행되는 활동과 서비스 간의 양방향 통신을 구축하기 위해 노력하고 있습니다.다른 프로세스에서 활동과 서비스간에 양방향 통신을 설정하는 방법은 무엇입니까?

활동에서 프로세스를 쿼리하는 것은 큰 문제가되지 않습니다. 그러나 프로세스가 이벤트에 대한 활동을 알리고 싶습니다. 그 뒤에있는 아이디어는 다음과 같습니다. 서비스가 실제 앱과 독립적으로 실행됩니다. 주기적으로 웹 서버를 쿼리합니다. 새로운 작업이 웹 서버에서 발견되면 프로세스는 작업을 알립니다.

AndDev.org에서 this thread을 찾았지만 제대로 작동하지 않는 것 같습니다. 나는 BroadcastReceiver로 장난하고있다. Activity를 통지해야하는 인터페이스를 구현했지만 문제는 Intent를 통해 Broadcast가 수행 되었기 때문에 리스너가 항상 null이라는 점입니다. 따라서 BroadcastReceiver를 확장하는 클래스가 새로 인스턴스화됩니다.

양방향 통신을 설정하려면 어떻게해야합니까? 이것은 가능해야합니다. 어떤 도움 감사합니다,

스테프

+0

"활동에서 프로세스를 쿼리하는 것이 큰 문제가 아님"자세히 설명 할 수 있습니까?> 정확히 어떻게합니까? 서비스에 묶여 있습니까? – Radu

답변

4

BroadcastReceiver을 사용하거나 Service이 키 이벤트를 호출하는 Activity register a callback or listener object을 사용하십시오. 위의 링크는 각 기술을 보여주는 예제 프로젝트를 예약하는 것입니다.

+0

내 Activity에서 BroadcastReceiver를 사용할 수 있습니까? 아니면 다른 클래스를 만들어야합니까? 인 텐트에 대해 BroadcastReceiver를 확장하는 클래스를 지정해야합니까? – stfn

+0

'BroadcastReceiver'는 클래스입니다 - 클래스는'Activity'와'BroadcastReceiver' 둘 다 될 수 없습니다. 위에서 링크 된 샘플 코드에서 보여 지듯이,'BroadcastReceiver'에 대해'Activity'의 내부 클래스를 사용할 수 있습니다. 당신은 브로드 캐스트'Intents'에 대한 컴포넌트 이름을 사용할 수 있습니다, 그러나 이것은'BroadcastReceiver' 클래스를 필요로합니다. 또는 위에 링크 된 샘플 코드에서 설명한대로 사용자 정의 액션 문자열을 사용할 수 있습니다. – CommonsWare

+0

감사합니다. 그러나 BroadcastReceiver가 실제 응용 프로그램과 독립적 인 가능한 한 오래 실행 가능한 프로세스이기 때문에 잘 맞는지 확실하지 않습니다. 실제 응용 프로그램이 실행되고 있지 않더라도 새 전자 메일처럼 상태 표시 줄에 알림을 표시 할 수 있어야합니다. 이것은 bindService (intent, connection, flags) 대신 startService (intent)를 통해 서비스를 시작해야한다는 것을 의미합니다. 나는 ApiDemos 'RemoteServiceClient'를 이해하려고 노력했지만 애매하게도 실패했습니다.'예제'를 더 많이 보게되면 혼란스러워집니다. – stfn

2

난 당신이 텐트의 결과를 다시 BroadcastReceiver 시작 활동을해야한다고 생각합니다.

또는 AIDL에 대해 AIDL을 사용할 수 있습니다. 샘플에는 AIDL 및 서비스 사용 방법에 대한 여러 예제가 있습니다. 그러나 AIDL은 귀하의 목적에 많은 번거 로움을 줄 수 있습니다.

+0

... 내 활동 다시 시작? 이것은 내가 피하려고 노력하는 것입니다 ... AIDL은 정말로 번거 로움이지만가는 길과 같습니다. 지금은 ApiDemos에서 RemoteServiceBinding을 이해하려고합니다. 어려운 것. – stfn

2

인 텐트를 받기 위해서는 BroadcastReceiver을 사용해야하며 의사 소통을 원할 때는 단순히 적절한 값으로 인 텐트를 만드십시오.

이렇게하면 모든 구성 요소간에 양방향 통신을 할 수 있습니다.

+0

이 답변을 자세히 설명해 주시겠습니까? 따라서 서비스에 BroadcastReceiver를 구현하고 활동에 다른 하나를 구현합니까? 양쪽에서 인 텐트를 보냈습니까? 또한 BroadcastReceiver 대신 LocalBroadcastReceiver를 사용할 수 있습니까? – Radu

관련 문제