2017-05-15 2 views
1

AsyncTaskLoader은 모두 AsyncTask이 수행 할 수 있으며 추가적으로 thread-duplication & 성숙한 사망 예방과 같은 내장 된 모범 사례 기능을 갖추고 있습니다.AsyncTask가 AsyncTaskLoader와 함께 사용되지 않습니다.

더 이상 AsyncTask을 사용해야하는 이유가 있습니까? 아니면 그냥 맹목적으로 사용해야합니까

+1

http://stackoverflow.com/questions/7120813/asynctaskloader-vs-asynctask –

+1

"또한 스레드 복제 및 사전 성숙한 죽음 예방과 같은 최상의 연습 기능이 내장되어 있습니다."- AsyncTaskLoader는 적어도 내가 어떻게 그 용어를 사용할지에 관해서는 그러한 것들을 "AsyncTask를 더 이상 사용할 이유가 있습니까?" - 모든 것이 로더 패턴과 맞지는 않습니다. "아니면 어디에서나 맹목적으로 AsyncTaskLoader를 사용해야합니까?"- 스레드와 관련된 모든 일을 "맹목적으로"해서는 안됩니다. 상이한 상황은 상이한 스레드 사용 패턴 및 상이한 클래스 (예를 들어, 'IntentService', 커스텀'ThreadPoolExecutor ')를 요구한다. – CommonsWare

답변

3

AsyncTaskLoader는 활동 또는 단편에 데이터를로드하는 데 유용합니다. AsyncTask는보다 다양하고 모든 종류의 구성 요소에서 모든 종류의 백그라운드 작업을 수행 할 수 있습니다. RxJava, HandlerThreads, 간단한 스레드 등의 대안이 있지만 확실히 사용되지는 않습니다. Service 또는 배경 작업의 일부 메커니즘의 IntentService :

+0

답변 해 주셔서 감사합니다. AsyncTaskLoader> AsyncTask와 같은 몇 가지 이미지/축소판을 다운로드하고 새로운 내용 (주석/좋아요/등)을로드하려고한다면 어떻게됩니까? AsyncTask가보다 다재다능한 예제를 줄 수 있습니까? – AlanSTACK

+0

새 내용을로드하려면 일반적으로 AsyncTaskLoader를 사용합니다. 이미지를로드하려면 Glide 또는 Picasso와 같은 특수 이미지로드 라이브러리를 사용하는 것이 좋습니다. AsyncTask는 (양식 게시와 같이) 한 번 데이터를 제출하는 좋은 옵션이 될 수 있지만 라이프 사이클/메모리 누수 문제에주의하십시오. 또한 AsyncTask를 사용하여 데이터를 디스크에 쓰거나 통계를 보내는 것과 같이 사용자가 작업을 떠난 후에도 계속 수행 할 수있는 원샷 비동기 작업을 시작할 수 있습니다. 또는 IntentService보다 제어가 필요한 경우 서비스에서 AsyncTask를 시작할 수 있습니다. – BladeCoder

2
  • 는 상관없이 활동이 파괴되거나되지 수행해야 백그라운드 작업을해야합니다.
  • 수행해야 할 백그라운드 작업이 있고 UI로 다시 통보하는 경우 : AsyncTaskLoader을 사용하십시오.
  • 수행해야 할 백그라운드 작업이 있고 사용자에게 다시 알리고 작업이 파괴 되더라도 계속 실행하려면 : AsyncTask을 사용하십시오. 활동이 일시 중지/파괴/구성 변경시 AsyncTask가 계속 실행되기 때문에 ... 이 경우에는 메모리 누수/활동 객체가 null임을주의하십시오. 혼자서 처리해야합니다.

모든 상황에 따라 다양한 방법으로 처리하고 피할 수 있습니다. 그러나 가장 쉬운 해결책을 위해 흐름 위에 유의하십시오.

+1

오랫동안 격차에도 불구하고 대답 해 주셔서 감사합니다. 이것은 나의 이해를 증가시켰다. – AlanSTACK

관련 문제