안드로이드 5.1 AsyncTask 개선점

안드로이드 5.1에서 AsyncTask의 소스 일부가 변경되었다. 변경된 소스를 살펴보기 전에 AsyncTask의 API 문서에서 필요한 내용을 살펴보자. API 문서는 많은 것들을 설명하고 있고, 이것은 그 만큼 복잡하기도 하고 사용 시에 주의할 필요가 있다는 것이다. 아래는 AsyncTask의 API 설명 중에 일부이고, AsyncTask를 문제없이 사용하기 위해서 꼭 알아둘 필요가 있는 내용이다. 아래 내용은 결국 AsyncTask는 UI 스레드에서 사용하라는 것이다.

Threading rules


There are a few threading rules that must be followed for this class to work properly:

안드로이드 5.1에서 변경된 내용을 살펴보자.


이 변경된 내용을 보면, 이전 버전(5.0)에서는 핸들러(Handler)인 InternalHandler를 미리 생성하고 외부(ActivityThread 클래스가 로딩)에서 초기화(init() 메서드 호출해서 미리 UI 스레드 루퍼를 사용하는)하는 구조인데 반해, 5.1 버전에서는 핸들러 생성을 레이지 로딩(Lazy Loading)하는 형태이고 싱글톤 패턴을 사용하는 것을 알 수 있다. 개인적으로 위에서 가이드로 UI 스레드에서 AsyncTask를 생성하고 실행하라고 설명하고 있기에 레이지 로딩하는 구조의 싱글톤의 형태가 더 좋겠다.


이 변경 코드는 5.1에서 사용하는 핸들러가 싱글톤의 형태를 가지고 있고, 이것을 사용하는 형태로 바뀌었다.

이상 5.1에서 이전에 비해서 변경된 내용을 살펴봤다. 변경된 내용이 성능에 영향을 미치는 부분이 없기 때문에 개발자나 사용자나 변경에 대한 사이드 이펙트는 없을 것으로 보인다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.