2016-07-14 4 views
0

IntentService에는 handleIntent에서 다른 스레드를 시작하는 자체 스레드가 있습니다. 서비스는 라이브 또는 완료된 서비스로 간주되며 다른 스레드가 활성화되어 있는지 여부는 중요하지 않습니까? IntentService가 작업을 마자 마자 주 스레드로 돌아가서 다른 스레드를 호출 할 수 있지만 다른 스레드의 시작은 활성 스레드가 아니라 활성 스레드가 될 수 있습니다. 활동.IntentService가 작업을 완료함에 따라. UI 스레드에서 다른 스레드를 시작할 수는 있지만 활동에서는 시작할 수 있습니까?

답변

0

IntentService가 자신의 스레드, 지금까지 그렇게하지 마십시오

handleIntent

에서 다른 스레드를 시작 있습니다. IntentServiceonHandleIntent() 메서드가 반환되면 서비스가 삭제되고 프로세스도 종료 될 수 있습니다. Android는 시작한 스레드가 무엇인지 모르기 때문에 프로세스가 유휴 상태이고 리소스가 낭비되는 것을 알 수 있습니다. IntentService이 완료되면 당신은 "시작"하는 다른 뭔가를해야 할 경우

, startActivity(), startService() 또는 sendBroadcast() (적절한 중)를 사용합니다. 다시 말하지만 Android는 스레드에 대해 알지 못합니다.

서비스 호출 시맨틱 (예 : 서비스 시작, 일부 작업 수행 후 발신자에게 제어권 반환)이 필요한 경우 IntentService은 올바른 도구가 아닙니다. 바운드 서비스 (또는 프로세스 경계를 ​​넘어야 할 경우 바운드 AIDL 서비스)를 사용하십시오.

+0

감사합니다. 첫 번째 부분 인 은 IntentService가 완료되면 해당 데이터를 수신하고 다른 스레드를 시작해야하며 두 번째 스레드는 주 스레드에서 시작해야하지만 필요하지 않습니다. IntentService의 완료에 대한 리시버가 액티비티가 되길 원합니다. IntentService의 완료는 액티브 한 액티비티 중에있을 수 있기 때문에, 다른 스레드를 시작할 수있는 IntentService 완료를 처리 할 수있는 전역 공간이 필요합니다. –

+0

그렇게하지 마십시오. IntentService로부터 스레드를 생성해서는 안됩니다. 나는 당신이 "왜 주 스레드에서 시작해야하는지 두 번째 스레드"와 같은 명령문을 설명 할 이유가 없기 때문에 여기서 도움을 줄 수는 없습니다. –

+0

좋아, 요점은 내가 다운로드 메커니즘을 구현하는 라이브러리를 사용하지만 두 번째를 시작하기 전에 리소스를 가져와야하고 곧 결과 시작 2_n 스레드 (어떤 메커니즘을 다운로드하는지)를 수신하고 을 처리하고 첫 번째 스레드가 계속 진행되어야한다는 점을 고려합니다. 나는 그 일을 떠난다. 그래서 IntentService를 사용하고 싶습니다. 조언이 도움이 될 수 있습니다. 감사합니다. –