AsyncTaskLoader 및 AsyncTask


129

이후 Honeycombv4 Compatibility Library그 사용이 가능하다 AsyncTaskLoader. 내가 이해 한 바에 따르면 AsyncTaskLoader화면 뒤집기와 같은 구성 변경을 통해 생존 할 수 있습니다.

AsyncTaskLoader대신에 사용하는 것이 좋습니다 AsyncTask? 않습니다 LoaderManager너무 그림에서 얻을?

그러나을 올바르게 사용하는 방법에 대한 좋은 예를 찾지 못했습니다 AsyncTaskLoader. 이 문서는 예제도 제공하지 않습니다. 누구나 좋은 예를 제시 할 수 있습니까?

답변:


51

자세한 정보를 얻으려면 호환성 라이브러리의 소스 코드를 살펴보십시오. 무엇을 하는가 FragmentActivity:

  • 목록 유지 LoaderManager'들
  • 다음을 사용하여 인스턴스를 저장하여 휴대 전화를 뒤집을 때 (또는 다른 구성 변경이 발생했을 때) 손상되지 않도록하십시오. onRetainNonConfigurationInstance()
  • 당신 initLoader()이 당신의 활동에 전화 할 때 올바른 로더를 걷어차

를 사용하여 LoaderManager로더와 인터페이스하고 필요한 콜백을 제공하여 로더를 작성하고 리턴하는 데이터로보기를 채 웁니다.

일반적으로 AsyncTask자신을 관리하는 것보다 쉬워야 합니다. 그러나 AsyncTaskLoader정확하게 문서화되어 있지 않으므로 문서에서 예제를 연구하거나 코드를 모델링해야합니다 CursorLoader.


5
나는 이것을 볼 것이다. 에 대한 좋은 예를 찾기에는 너무 이르지만 AsyncTaskLoader더 많은 개발자가 사용하기 시작하면 더 많은 예가 나옵니다.
OKA

47

AsyncTaskLoaderAsyncTask를 비교할 때 장치 화면을 회전 할 때 알 수 있듯이 네트워킹 트랜잭션이 진행되는 동안 이미지가 장치를 회전시키는 것을 분명히하기 위해 활동을 파괴하고 다시 만들 수 있습니다.

AsyncTask 는 백그라운드 스레드로 다시 실행되며 이전 백그라운드 스레드 처리는 중복되고 좀비였습니다.

AsyncTaskLoader 는 이전에 로더 관리자에 등록 된 로더 ID를 기준으로 재사용되므로 네트워크 트랜잭션을 다시 실행하지 마십시오.

요약하면, AsyncTaskLoader 는 백그라운드 스레드의 중복을 방지하고 좀비 활동의 중복을 제거합니다.


11

AsyncTaskLoaderAsyncTask 와 동일한 기능을 수행 하지만 조금 더 좋습니다. 활동 구성 변경을보다 쉽게 ​​처리 할 수 ​​있으며 조각 및 활동의 수명주기 내에서 작동합니다. 좋은 점은 AsyncTaskLoader를 사용하는 모든 상황에서 AsyncTaskLoader를 사용할 수 있다는 것입니다. Activity / Fragment가 처리하기 위해 데이터를 메모리에로드해야 할 때마다 AsyncTaskLoader가 작업을 더 잘 수행 할 수 있습니다.

그러나 AsyncTasks 사용과 관련된 몇 가지 문제가 있습니다.

  • 구성 변경으로 인해 문제가 발생할 수 있습니다
  • 활동을 일시 중지해도 AsyncTask가 일시 중지되지 않습니다
  • 상당한 양의 상용구 코드 (더 많은 가능한 오류를 의미 함)

AsyncTaskLoader 문서


8

다른 답변에 설명 된 것 이외의 몇 가지 차이점 :

사용하는 경우 AsyncTaskLoader을 통해 AsyncTask를 :

  • AsyncTaskLoader 는 새로운 데이터가 반환 될 때까지 오래된 캐시 된 데이터를 자유롭게로드 할 수 있도록합니다.forceLoad()

  • 클라이언트에 대한 연속 업데이트를 방지 할 수있는 AsyncTaskLoader 에 지연을 설정할 setUpdateThrottle()수 있습니다 (활동 / 조각)

  • AsyncTaskLoader 는 공통 부모 활동이 있고 시작된 경우 여러 조각에 공유 할 수 있습니다.getActivity().getSupportLoaderManager()

  • LoaderManger연결된 활동을 더 이상 사용할 수 없으면 AsyncTaskLoader손상 됩니다. 호출자 활동이 중단되면 AsyncTasks 를 수동으로 제거해야 합니다. 이렇게하면 모든 정리 작업을 작성하지 않아도됩니다. AsyncTaskLoader는 해당 수명주기와 잘 작동합니다.

따라서 AsyncTaskLoader가 AsyncTask보다 낫습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.