앱이 빠르기 위해서는 DB 처리와 네트워크 처리를 main thread가 아닌 다른 thread에서 처리해야 합니다. 더불어 사용자에게 필요한 정보를 앱이 켜져 있지 않을 때 가져오면 더 좋습니다. 사용자가 앱을 킬 때 이미 로컬에 저장되어 있는 데이터를 가져오면 되니까요. 전자는 AsyncTastLoader로 후자는 SyncAdapter로 해결할 수 있습니다.
AsyncTaskLoader는 무엇이죠?
비동기 처리를 위한 클래스로 API Level 11에 도입되었습니다. SupportPackage에 포함되어 있기 때문에 어떤 Version에서든 이용이 가능합니다. 다음과 같은 특징을 가졌습니다. (안드로이드 디벨로퍼 문서 참조)
1. 모든 Activity와 Fragment에서 사용할 수 있습니다. 장점입니다.
2. 비동기적으로 데이터를 로딩할 수 있습니다.
3. 데이터를 모니터하고 내용이 변경되면 새로운 결과를 전달합니다.
4. 설정 변경 후, 다시 만들어질 때 마지막 로더의 커서에 접속합니다. 그 데이터를 re-query할 필요가 없습니다
AsyncTask랑은 무엇이 다르죠?
쓰기 쉽습니다. 더 구조적으로 깔끔합니다.
AsyncTaskLoader를 쓰면 구체적으로 뭐가 좋지요?
main thread가 아닌 thread로 데이터를 비동기적으로 로딩할 수 있습니다. DB 긁어오는 모듈이 Activity에서 분리되어 더 깔끔한 구조를 가진 앱을 만들 수 있습니다.
어떤 방식으로 실행되나요?
Activity 혹은 Fragment에서 Loader를 implement합니다. 그리고 Loader Class를 따로 만들어주면 됩니다. 메소드들은 다음과 같은 순서로 실행됩니다.
Fragment﹕ +++ Calling initLoader()! +++
Fragment﹕ +++ Initializing the new Loader... +++
Fragment﹕ +++ onCreateLoader() called! +++
Loader﹕ +++ onStartLoading() called! +++
Loader﹕ +++ The current data is data is null... so force load! +++
Loader﹕ +++ forceLoad() called! +++
Loader﹕ +++ loadInBackground() called! +++
Loader﹕ +++ Delivering results to the LoaderManager for the ListFragment to display! +++
Fragment﹕ +++ onLoadFinished() called! +++
ListLoader﹕ +++ onStopLoading() called! +++
참조
http://dev.classmethod.jp/smartphone/asynctaskloader/