활동을 시작하는 서비스를위한 가장 좋은 방법과 의사 소통

StackOverflow https://stackoverflow.com/questions/2274641

  •  20-09-2019
  •  | 
  •  

문제

소켓을 듣는 서비스가 있습니다. 특정 입력을받을 때 활동을 만드는 것입니다. 다른 입력을받을 때는이 활동을 죽이는 것입니다. 나는 AIDL을 통한 활동과 서비스를 전달하기 위해 한동안 고군분투했다.http://developer.android.com/guide/developing/tools/aidl.html), 그러나 이것은 효과적이지 않은 것 같습니다. AIDL은 이야기 할 프로세스가 활동이 아니라 서비스 일 때만 효과적이라고 생각합니다. 나는 내 문제를 해결하는 방법에 대한 지시 나 제안을 좋아합니다.

건배,

도움이 되었습니까?

해결책

소켓을 듣는 서비스가 있습니다. 특정 입력을받을 때 활동을 만드는 것입니다.

이 구성을 가능하게하십시오. 서비스는 제외한 활동을 시작해서는 안됩니다 매우 비정상적인 상황 (예 : 소켓은 SIP 연결이며 VoIP 클라이언트를 생성하고 있습니다). 활동을 팝업하면 사용자가 무엇을하고 있는지 방해합니다.

다른 입력을받을 때는이 활동을 죽이는 것입니다.

이것이 유효한 패턴 인 곳에서 본 유일한 시나리오는 상대방이 라인을 끊을 때 전화 내 화면을 무시하는 것입니다. VoIP 클라이언트를 만들고 있다면 제안 된 패턴은 괜찮 으려고하지만, 그렇지 않으면,이를 사용하는 사용자의 중간에 활동이 사라지는 것을 재고하십시오.

AIDL은 이야기 할 프로세스가 활동이 아니라 서비스 일 때만 효과적이라고 생각합니다.

아니요, 역 방향으로도 작동하지만 일반적으로 활동이 서비스를 시작하고 바인딩하는 활동 인 경우에만 가능합니다. 더 중요한 것은 AIDL은 크로스 프로세스 커뮤니케이션을위한 것입니다.

나는 내 문제를 해결하는 방법에 대한 지시 나 제안을 좋아합니다.

당신은 실제로 당신에게 철저한 답변을 제공하기 위해 의사 소통의 특성에 대한 충분한 정보를 제공하지 않았습니다. 정확히 서비스가 활동을 말하려고하는 것은 무엇입니까? 활동이 서비스와 의사 소통을 시도하고 있습니까?

활동에서 서비스로의 진행중인 커뮤니케이션을위한 권장 패턴은 로컬 바인딩 패턴을 사용하는 것입니다. SDK 샘플에서 이것의 예를 찾을 수 있으며 하나를 찾을 수 있습니다. 여기 또한.

그런 다음 서비스에는 클라이언트에게 다시 통신 할 수있는 옵션이 있습니다. 콜백을 통해 (예 : Handler Mr. Smiljanić가 제공 한 답변) 또는 방송을 통해 Intents. 콜백의 경우, 콜백 객체를 제공하기 위해 API에 액세스하려면 활동이 서비스에 바인딩해야합니다. 그런 다음 서비스는 주요 이벤트 중에 해당 객체를 유지하고 호출 방법을 호출합니다.

서비스가 백그라운드 스레드에서 기본 작업을 수행하는 경우 UI 작업이 UI 스레드에서 수행되도록해야합니다. 그만큼 Handler 그것에 대한 한 가지 접근법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top