나는 서비스
이 거의 Service
의 기본 응용 프로그램 스레드에서 작업을 할 필요가 없기 때문에에서 실행되는 AsyncTask를이, 난 그냥 보통의 스레드를 사용하는 것이 좋습니다 것입니다.
AsyncTask가 실행되는 동안 service onStartCommand() 메서드가 반환되면 어떻게됩니까?
없음.
AsyncTask가 실행되는 동안 서비스가 종료됩니까?
onStartCommand()
서비스가 명령을 보낼 때 호출됩니다. 서비스가 종료 될 때 호출되지 않습니다.
사용해야합니까? START_STICKY?
초록에서는 대답 할 수 없습니다. 서비스를 나중에 다시 시작해야하는 경우에 사용하십시오 (예 : 사용 가능한 메모리가 개선되는 경우).
onPostExecute()는 UIThread에서 실행되므로 서비스와 동일한 스레드에서 실행됩니까?
개체가 Java의 스레드에서 실행되지 않습니다. 따라서 서비스는 스레드에서 실행되지 않습니다. 메서드는 스레드에서 실행됩니다.
위의 경우 서비스가 종료되는 동안 AsyncTask가 실행중인 경우에는 어떻게됩니까?
서비스를 종료하는 사람은 귀하뿐입니다.
OS가 다른 이유로 서비스를 제거하는 경우 전체 프로세스를 종료하여 OS를 종료하는 경향이 있습니다.이 경우 AsyncTask
도 사라집니다.
어떤 스레드가 onPostExeucte()에 적용됩니까?
onPostExecute()
은 기본 응용 프로그램 스레드에서 실행됩니다. Service
에서 이것이 거의 필요하지 않거나 좋은 아이디어이기 때문에 AsyncTask
이 아닌 일반 스레드를 사용해보십시오.
IntentService
은 고유 한 백그라운드 스레드가 포함되어 있으므로 작업이 본질적으로 트랜잭션 인 경우 (예 : 몇 초 동안 실행해야하고 작업이 완료되고 서비스가 더 이상 필요하지 않은 경우) IntentService
을 사용하십시오. , 그래서 당신은 당신이 필요하지 않습니다. 서비스 아무것도와는 아무 상관이없는 방송 수신기
의 onReceive 메서드에서 인스턴스화되기 때문에
UPDATE
내가 서비스를 사용하고있는 이유입니다.
내가 onPreExecute 및 onPostExecute에서 수행중인 알림도 실행해야합니다.
Notification
은 백그라운드 스레드에서 발생시킬 수 있습니다. 기본 응용 프로그램 스레드에서 수행 할 필요가 없습니다.
답장을 보내 주셔서 감사합니다. 나는 내 질문을 업데이트했다. –
@MadhurAhuja : 답변을 업데이트했습니다. – CommonsWare