일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- APK 동적로딩
- ArrayMap
- callstack 출력
- 음량표준화
- Dagger2란
- android network
- HashMap vs ArrayMap
- lufs
- Service관리
- MediaDataSource
- mitmproxy
- Replaygain
- so파일 동적로딩
- convert Intent to string
- gitignore작성법
- gitignore
- 오픈소스라이선스
- print callstack
- 네트워크 디버깅
- BlockingQueue Capacity
- java callstack
- corePoolSize
- convert string to intent
- Intent String 변환
- RxJava Programming
- enum performance
- android enum
- Service 팁
- RxJava 스터디
- APK로딩
- Today
- Total
일상&개발 로그
AsyncTask 특징 본문
# AsyncTask와 Thread-Handler 중 선택 시 참고하려고 포스팅
1. AsyncTask의 단점
Memory leak 발생 가능
AsyncTask를 execute한 Activity가 destroy되는 경우 메모리 릭 발생
발생하지 않게 하려면 cancel을 해줘야 함(cancel하지 않을 경우 onPostExecute, cancel할 경우 onCanceled를 탐)
디바이스의 화면회전
화면 회전 시 Activity를 destroy시키고 다시 생성하기 때문에 AsyncTask를 수행 후 화면 회전 시
destroy된 Activity의 UI변경을 시도, IllegalArgumentException발생
또한 이미 destroy된 Activity를 참조하기 때문에 메모리 릭이 발생할 수 있음
2. AsyncTask의 특징
병행실행
execute 중복 실행 시 하나의 Thread에서 실행되기 때문에 순차적으로 실행 됨
병행실행을 위해서는 execute가 아닌 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)로 실행
AsyncTask 파라미터
A의 경우 doInBackground의 파라미터,
B의 경우 onProgressUpdate의 파라미터,
C의 경우 onPostExecute의 파라미터이다.
C의 경우 doInBackground의 return값이고, B의 경우 doInBackground에서 호출하는 publishProgress의 파라미터 값이다.
작업 중 취소 처리
AsyncTask객체의 cancel() 호출 후 doInBackground에서 isCanceled();로 cancel여부 확인
AsyncTask객체의 cancel(true) 호출 후 Thread.currentThread.isInterrupted()로 interrupt여부 확인
Threading rule
AsyncTask는 반드시 MainThread에서 실행되어야 함
AsyncTask객체에서 실행은 한 번만 가능함. 중복 호출 시 Exception 발생
원본 포스팅
http://webnautes.tistory.com/1082'개발 > 안드로이드 개발' 카테고리의 다른 글
Gradle 라이브러리 충돌 시 대처방법 (0) | 2017.05.12 |
---|---|
Dynamic APK Loading Research (0) | 2017.05.10 |
Intent를 String으로 변환하기 (0) | 2017.04.19 |
CallStack출력하기 (0) | 2017.02.08 |
so파일 동적로딩 시 arm-eabi관련해서 알아둘 것 (0) | 2017.02.08 |