책소개
안드로이드 앱을 위한 비동기 처리 기법의 모든 것
멀티스레딩은 뛰어난 사용자 경험을 제공하는 안드로이드 앱을 만드는 데 필수적이다. 주니어 안드로이드 개발자가 시니어 개발자로 발돋움하기 위해서라도 반드시 공부하고 넘어가야 하는 고급 주제이기도 하다. 이 책은 안드로이드 플랫폼에 특화된 여러 비동기 메커니즘을 설명하며, 앱에 가장 적합한 기법을 고를 수 있게 가이드라인을 제시한다. 베테랑 저자가 설명하는 지침과 조언을 숙지하면 날렵하고 안정적인 앱을 수월하게 만들 수 있다.
목차
CHAPTER 1 안드로이드 구성요소와 멀티프로세싱의 필요성
__1.1 안드로이드 소프트웨어 스택
__1.2 응용프로그램 아키텍처
____1.2.1 Application 객체
____1.2.2 구성요소
__1.3 응용프로그램 실행
____1.3.1 리눅스 프로세스
____1.3.2 생명주기
__1.4 성능을 위해 구조화된 응용프로그램
____1.4.1 스레드를 통해 반응성 있는 응용프로그램 만들기
__1.5 마치며
PART I 기초
CHAPTER 2 자바의 멀티스레딩
__2.1 스레드의 기본
____2.1.1 실행
____2.1.2 싱글스레드 응용프로그램
____2.1.3 멀티스레드 응용프로그램
__2.2 스레드 안전
____2.2.1 암시적 잠금과 자바 모니터
____2.2.2 공유 자원 접근의 동기화
____2.2.3 예제: 소비자와 생산자
__2.3 태스크 실행 전략
____2.3.1 동시 실행 설계
__2.4 마치며
CHAPTER 3 안드로이드 스레드
__3.1 안드로이드 응용프로그램 스레드
____3.1.1 UI 스레드
____3.1.2 바인더 스레드
____3.1.3 백그라운드 스레드
__3.2 리눅스 프로세스와 스레드
____3.2.1 스케줄링
__3.3 마치며
CHAPTER 4 스레드 통신
__4.1 파이프
____4.1.1 기본 파이프 사용
____4.1.2 예제: 작업자 스레드에서 문자 처리
__4.2 공유 메모리
____4.2.1 시그널링
__4.3 블로킹 큐
__4.4 안드로이드 메시지 전달
____4.4.1 예제: 기본 메시지 전달
____4.4.2 메시지 전달에 사용되는 클래스
____4.4.3 메시지
____4.4.4 루퍼
____4.4.5 핸들러
____4.4.6 큐에서 메시지 제거
____4.4.7 메시지 큐 관찰
__4.5 UI 스레드와 통신
__4.6 마치며
CHAPTER 5 프로세스 간 통신
__5.1 안드로이드 RPC
____5.1.1 바인더
__5.2 AIDL
____5.2.1 동기식 RPC
____5.2.2 비동기식 RPC
__5.3 바인더를 이용한 메시지 전달
____5.3.1 단방향 통신
____5.3.2 양방향 통신
__5.4 마치며
CHAPTER 6 메모리 관리
__6.1 가비지 컬렉션
__6.2 스레드 관련 메모리 누수
____6.2.1 스레드 실행
____6.2.2 스레드 통신
__6.3 메모리 누수 방지
____6.3.1 정적 내부 클래스 사용
____6.3.2 약한 참조 사용
____6.3.3 작업자 스레드 실행 중지
____6.3.4 작업자 스레드 유지
____6.3.5 메시지 큐 정리
__6.4 마치며
Part II 비동기 기법
CHAPTER 7 기본 스레드의 생명주기 관리
__7.1 기본사항
____7.1.1 생명주기
____7.1.2 인터럽트
____7.1.3 잡히지 않은 예외
__7.2 스레드 관리
____7.2.1 정의와 시작
____7.2.2 유지
__7.3 마치며
CHAPTER 8 핸들러 스레드: 고수준 큐 메커니즘
__8.1 기본사항
__8.2 생명주기
__8.3 사용 사례
____8.3.1 반복되는 태스크 실행
____8.3.2 관련 태스크
____8.3.3 태스크 연쇄
____8.3.4 조건부 태스크 삽입
__8.4 마치며
CHAPTER 9 Executor 프레임워크를 통한 스레드 실행 제어
__9.1 Executor
__9.2 스레드 풀
____9.2.1 미리 정의된 스레드 풀
____9.2.2 커스텀 스레드 풀
____9.2.3 스레드 풀 설계
____9.2.4 생명주기
____9.2.5 스레드 풀의 중단
____9.2.6 스레드 풀 사용 사례와 위험성
__9.3 태스크 관리
____9.3.1 태스크 표현
____9.3.2 태스크 보내기
____9.3.3 태스크 거부하기
__9.4 ExecutorCompletionService
__9.5 마치며
CHAPTER 10 AsyncTask로 백그라운드 태스크를 UI 스레드에 묶기
__10.1 기본사항
____10.1.1 생성과 시작
____10.1.2 취소
____10.1.3 상태
__10.2 AsyncTask 구현
____10.2.1 예제: 이미지 다운로드
__10.3 백그라운드 태스크 실행
____10.3.1 응용프로그램 전역 실행
____10.3.2 다양한 플랫폼 버전에서 실행
____10.3.3 커스텀 실행
__10.4 AsyncTask의 대안
____10.4.1 AsyncTask가 너무 평범하게 구현된 경우
____10.4.2 루퍼가 필요한 백그라운드 태스크
____10.4.3 지역 서비스
____10.4.4 execute(Runnable) 사용
__10.5 마치며
CHAPTER 11 서비스
__11.1 비동기 실행을 위해 서비스를 사용해야 하는 이유
__11.2 지역, 원격, 전역 서비스
__11.3 생성과 실행
__11.4 생명주기
__11.5 시작 서비스
____11.5.1 onStartCommand 구현
____11.5.2 재시작을 위한 옵션
____11.5.3 사용자 제어 서비스
____11.5.4 태스크 제어 서비스
__11.6 바운드 서비스
____11.6.1 지역 바인딩
__11.7 비동기 기술 선정
__11.8 마치며
CHAPTER 12 인텐트 서비스
__12.1 기본 사항
__12.2 인텐트 서비스를 사용하는 좋은 방법
____12.2.1 순차적으로 정렬된 태스크
____12.2.2 브로드캐스트 리시버에서 비동기 실행
__12.3 인텐트 서비스와 서비스
__12.4 마치며
CHAPTER 13 AsyncQueryHandler를 이용한 콘텐트 프로바이더 접근
__13.1 콘텐트 프로바이더에 대한 간략한 소개
__13.2 콘텐트 프로바이더의 백그라운드 처리에 대한 정당성
__13.3 AsyncQueryHandler 사용
____13.3.1 예제: 연락처 확장 리스트
____13.3.2 AsyncQueryHandler 이해
____13.3.3 한계
__13.4 마치며
CHAPTER 14 로더를 이용한 자동 백그라운드 실행
__14.1 로더 프레임워크
____14.1.1 LoaderManager
____14.1.2 LoaderCallbacks
____14.1.3 AsyncTaskLoader
__14.2 CursorLoader를 이용한 쉬운 데이터 로딩
____14.2.1 CursorLoader 사용하기
____14.2.2 예제: 연락처 리스트
____14.2.3 CRUD 지원 추가
__14.3 커스텀 로더 구현
____14.3.1 로더 생명주기
____14.3.2 백그라운드 로딩
____14.3.3 콘텐츠 관리
____14.3.4 캐시된 결과를 전달
____14.3.5 예제: 커스텀 파일 로더
____14.3.6 여러 개의 로더 처리
__14.4 마치며
CHAPTER 15 비동기 기술의 선택
__15.1 간단하게 하라
__15.2 스레드와 자원 관리
__15.3 반응성을 위한 메시지 전달
__15.4 예상치 못한 태스크 종료를 피하라
__15.5 콘텐트 프로바이더에 쉽게 접근