2012-02-03 2 views
1

오늘은 Intents에 대해 배우고 서비스 활동에 바인딩했습니다. 서비스에서 데이터로 데이터를 전송하는 것은 매우 쉽고 좋은 방법입니다. 서비스를 시작하는 활동을 테스트하고 싶었는데,이 서비스는 웹 페이지에서 데이터를 얻기 위해 호출합니다. 나는 액티비티를 서비스에 바인딩하여 액티비티가 서비스 메소드를 호출하고 결과를 토스트 할 수있게했다. 서비스 메소드에서 나는 웹 페이지를 호출하고 데이터를 리턴한다. 내가 그것을 테스트했을 때 null 포인터 예외를 얻었습니다. 저는 올바른 방법으로하지 않을 것입니다. 아무에게도 이것을 올바르게 구현하는 방법에 대한 제안이 없습니다.서비스를 시작하고 데이터를 반환

+0

코드의 일부를 보지 않고도 말할 수 없습니다. –

+0

코드 –

+0

을 추가했습니다. 알아두면 도움이 될 것입니다. 충돌이 일어나는 곳이 어디입니까? 건초 더미에서 바늘을 치는 대신에 :). –

답변

1

여기서 상당히 견고한 스레드 동기화 문제를 다루고 있습니다. 어떤 종류의 청취자 패러다임을 등록하면 서비스가 생성하는 데이터에 대한 청취자로 활동을 등록하는 데 훨씬 도움이됩니다. 현재는 서비스와 활동간에 전혀 동기화가 이루어지지 않으므로 Activity가 준비되기 전에 서비스에서 결과를 가져 오려고합니다. 청취자 패턴 또는 옵서버 패턴에 대해 논의하는 많은 자원이 있습니다.

서비스가 실제로 제대로 작동하는지 여부는 알 수 없습니다. 나는 둘 사이의 대화를보고 있습니다.

+0

많은 스레딩 문제가 있음을 알고 있습니다. 여기, 나는 1 차적인 의도로 주변을 어지럽 혔고, 핸들러를 들여다 보았습니다.하지만 스레딩 문제를 해결해야 할 것 같습니다. –

0

서비스에서 결과를 반환 할 때 ResultReceiver 인터페이스를 구현하고 putExtra를 통해 수신자 객체를 서비스에 전달하는 것이 좋습니다. 귀하의 서비스에서 수신자 객체를 가져오고 receiver.send() 번들로 아무것도 보내지 않는 기능을 호출하십시오. [적어도 IntentService]에서이 패턴을 테스트했습니다.

편집 : 완벽한 구현을 위해 this 게시물을 확인하십시오.

관련 문제