2012-12-12 3 views
0

a) 내 코드에서 startService()을 두 번 호출하면 Intent를 호출 한 순서대로 처리 할 예정입니까, 아니면 무작위로 전환 할 수 있습니까?은 startService() 인 텐트가 직렬화 되었습니까?

b) 두 번째 호출이 시작되기 전에 onStartCommand()이 완료되면 처음으로 실행되거나 병렬로 실행될 수 있습니까?

나는 android services guide 및 참조를 읽었습니다. 그들은 작업자 스레드가 직렬화되는 방법을 명확하게 보여 주지만 인 텐트가 전달되고 처리되는 방법에 대한 정보는 거의 발견하지 못했습니다.

답변

2

내 코드에서 startService()를 두 번 호출하면 인 텐트를 호출 한 순서대로 처리 할 것인지 무작위로 전환 할 수 있습니까?

이 경우 Service의 동작은 문서화되지 않았으므로 마지막으로 확인했습니다. 그러나 실제로 발생하는 것처럼 보이는 순서대로 호출해야합니다.

두 번째 호출이 시작되기 전에 onStartCommand()를 통해 처음 실행되거나 병렬로 실행됩니까?

이는 귀하에게 달려 있습니다. 기본적으로 ServiceonStartCommand()이 주 응용 프로그램 스레드에서 호출되므로 한 번에 하나의 명령 만 처리됩니다. onStartCommand()의 스레드를 처리하여 명령을 처리하도록 선택하면 해당 스레드가 병렬로 실행될 수 있습니다.

의도적으로 IntentService 작업자 스레드가 직렬화되는 방식을 보여 주지만 Intent가 전달되고 처리되는 방법에 대해서는 거의 정보가 없습니다.

IntentService은 자체 스레드를 유지 관리합니다. onStartCommand() 대신 (또는 가능하면 추가로) onHandleIntent()을 구현합니다. 스레드가 하나뿐이므로 한 번에 하나만 실행됩니다. onHandleIntent(). 피드백

+0

들으 - 예 - 내가 ** **'onStartCommand()가'후 처음 실행 둘째가 시작되기 전에 완료해야합니다에서 스레드를 시작하지 않는 경우) B에서 더 긁어? – donfede

+0

@donfede : 예. 앞서 언급했듯이, onStartCommand()는 메인 애플리케이션 스레드에서 호출되며, 한 스레드는 한 번에 두 가지 작업을 수행 할 수 없습니다. – CommonsWare

+0

ACK - thx - 너의 책을 즐기고있다 :) – donfede

관련 문제