2012-01-03 1 views
2

official documentation에는 "귀하의 애플리케이션은 귀하의 애플리케이션과 Android 마켓 간의 메시징을 용이하게하기 위해 로컬 서비스가 있어야합니다."라고되어 있습니다.Android 인앱 결제 : 로컬 서비스를 만드는 것이 정말로 필요한가요?

제 질문은 이것이 정말로 필요한 것입니까? 그렇다면 왜?

로컬 서비스를 먼저 만들 필요없이 Activity의 onCreate 메소드에서 MarketBillingService에 간단하게 바인딩 할 수는 없습니까?

요청을 원격 MarketBillingService로 전달하는 로컬 서비스를 생성하면 조금 복잡해 보입니다.

답변

2

나는 인앱 결제 예제 애플리케이션에 불필요 해 보이는 많은 레이어가 있지만, 서비스를 사용하여 시장과 상호 작용하는 아이디어는 좋은 것이라고 동의합니다. 이는 프로세스가 매우 비동기 적이기 때문에 (그리고 많은 시간이 소요될 수 있음) 사용자 구매의 워크 플로 외부에서 일부 이벤트가 생성되기 때문입니다.

"항목"을 구매할지 여부를 결정할 때 사용자가 일부 마켓 UI와 상호 작용하는 동안이 과정이 끝나면 앱과 마켓 앱간에 긴 앞뒤로 이동하여 시장에서 서버와 통신하는 동안 많은 단계가 지연됩니다. 사용자를 붙잡고 그 활동을 기다려서 구매를 완료 할 수 없도록하고 싶지는 않습니다. 사용자가 서비스에 참여하여 사용자가 앱을 돌아 다니거나 한동안 완전히 떠날 수 있으며 삭제 된 프로세스에 대한 걱정없이 구매를 완료하고 적절한 구매 한 콘텐츠를 다운로드 할 수 있습니다.

구매가 취소되거나 다른 방식으로 거부되는 경우 초기 구매 과정에서 오랜 시간 후에 발생할 수있는 많은 이벤트가 있으며 사용자는 완전히 다른 방식으로 또는 자신의 전화가 깨어났다. 활동을 팝업하지 않고 이러한 이벤트를 처리 할 수 ​​있기를 원합니다.

결론은 서비스가 설계된 장기 실행 백그라운드 프로세스입니다.

HTH

+0

는 던전 샘플 응용 프로그램은'mBillingService.unbind()'에서 주요 활동의들의 OnDestroy 메소드를 호출합니다. 따라서 지역 서비스의 수명은 주요 활동의 수명과 동일해야합니다. 또한 로컬 서비스는 자체 스레드를 생성하지 않으므로 모든 작업이 프로세스의 주 스레드에서 수행됩니다. 그렇다면 현지 서비스를받는 것이 무엇입니까? 안드로이드에게 "내 프로세스를 죽이지 마세요"라고 말하는 것이 전부입니까? IMO 서비스는 그것을 보증하지 않습니다. – devconsole

+0

예제의 서비스는 바인드 된 컨텍스트에서 실행되지 않으며'unbind() '에 대한 호출은 여기의 라이프 사이클과는 아무런 관련이 없습니다. 레퍼런스를 얻고 직접 레퍼런스를 호출하는 것은 액티비티에서만 가능합니다. 이 서비스는 주로 브로드 캐스트를 수신 한 결과 시작되며 지정된 작업이 완료 될 때까지 실행됩니다. 요컨대, Receiver에서 모든 작업을 Activity에 바인딩하면 사용자가 해당 Activity를 떠날 때 어떤 일이 발생합니까? 사건은 너무 오랜 기간에 걸쳐 발생합니다. 서비스는 중요하지 않습니다. 사용자는 퇴장 할 수 있으며 작업은 여전히 ​​완료됩니다. – Devunwired

+0

플러스, 다른 비동기 이벤트 중 하나가 들어 오면 Activity를 시작하거나 (사용자를 체크 할 것임) BroadcastReceiver에서 직접 처리하려고하지 않아도됩니다. 즉, 모든 것이 동 기적으로 또는 수신기 인스턴스가 죽을 것입니다. IMO의 경우,이 예에서의 진짜 보잘 것없는 부분은 Handler와 서비스와 상호 작용하는 데 필요한 다른 계층에 있습니다. – Devunwired