AsyncTask
- AsyncTask는 비동기적으로 실행되는 쓰레드 관리를 위해 사용되는 클래스이다. 비동기 처리를 하기 쉽고 코드적으로 깔끔하지만 재사용 불가능하고 종료를 하지 않으면 종료가 되지 않는다.
Why is AsyncTask deprecated?
[1] 메모리누수
- 액티비티의 종료 시점과 어싱크태스크의 끝나는 시점의 차이. 예를들어 화면을 회전할 때 계속해서 어싱크가 쌓여서 실행되는 경우이다.
- 화면이 회전되면 액티비티는 종료되고 새로 생성된다. 새로생성된 액티비티는 다른 인스턴스 이지만 어싱크가 실행중인 경우 기존 액티비티도 메모리에서 제거되지 않는다.
[2] 순차실행으로 인한 속도 저하
[3] 예외처리 메소드가 없음
[4] 병렬실행시 doinBackground 실행 순서를 보장할 수 없음. 하지만 안드로이드 버전이 올라가면서 기본 동작이 병렬실행에서 순차실행으로 변경됨
[5] 프래그먼트에서 어싱크를 실행하고 백키로 액티비티를 종료하면 프래그먼트는 액티비티와 분리되면서 getContext어ㅘ getActivity가 null을 리턴. onPostExecute에서 널포인트발생