[Android] onhandleintent에서 비동기 작업 시작


Answers

IntentService 는 이미 백그라운드 프로세스입니다. 거기에서 AsyncTask를 시작할 필요가 없습니다. 또한 AsyncTask 시작하는 것은 어디에서나 '안전'합니다. 그것은 멀티 쓰레드를 돕는 도우미 클래스입니다. 액티비티에서 AsyncTask를 사용한다면, AsyncTask의 doInBackground() 메소드에서 View 조작하지 않도록하십시오.

IntentService 안에 여러 개의 스레드를 생성해야하는 경우 다음을 사용하십시오.

새 스레드 (Runnable r) .start ();

Android에서 Runnable 스레드를 실행하는 방법에 대한 예제를 참조하십시오 .

어떤 종류의 콜백을 호출해야한다면 Handler를 사용하십시오. 예를 보려면 http://www.vogella.com/articles/AndroidPerformance/article.html#handler를 참조하십시오 .

Question

onHandleIntent() 메소드 내에서 비동기 태스크를 시작해야합니까? 나는 onHandleIntent()worker thread 에서 실행되므로 asyncTask 를 거기에서 시작하는 것이 안전 할 asyncTask 습니다. ??




IntentService 내에서 AsyncTask를 사용해야하는 경우 de doInBackGround 및 onPostExecute를 호출하는 AsyncTask에 메서드를 만들 수 있습니다. 이 같은:

void executeFlowOnBackground(Params params) {
  onPostExecute(doInBackground(params));
}

필자의 경우 모든 애플 리케이션 요청은 AsyncTask를 확장 한 클래스에 의해 이루어지기 때문에 구현했다. 구현 때문에 코드를 리팩터링하는 것이 어려웠다.




AsyncTask 클래스는 멀티 스레딩을 수행하는 메커니즘을 제공하기 위해 사용되므로 이벤트 스레드가 정지되지는 않지만 서비스를 사용함에 따라 서비스에서 AsyncTask를 사용하지 말고 대신 장기간 실행중인 작업 인 스레드를 사용할 수 있습니다 서비스에서 실행됩니다.