<원문>https://medium.com/@toru.wonyoung/%EC%B1%85-%EB%A6%AC%EB%B7%B0-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-next-step-c294477ed6f6안드로이드는 모바일 플랫폼 중에 가장 핫하다고 할 수 있습니다. 또한 기술의 발전 속도 및 트렌드가 상당히 빠릅니다. 이에 부응이라도 하듯이, 시중에 가 보면 안드로이드 기본서는 상당히 많이 있습니다.그러나 기본서는 많지만, 소위 조금 아는 분들- 쥬니어레벨을 벗어난 분들-의 눈높이와 입맛을 맞출 수 있는 책은 그리 많지 않다는 것이 작금의 현실입니다.때마침 나타난 책이 있습니다. ‘안드로이드 프로그래밍 Next Step’ 이라는 책인데요. 인사이트에서 최근에 발간되었습니다.이 책은 안드로이드의 4대 컴포넌트-액티비티,서비스,컨텐트 프로바이더, 브로드캐스트 리시버- 에 대해 좀더 깊은 고찰을 할 수 있도록 할 수 있습니다. 개발자들이 일을 하다 보면 헷갈릴 수도 있는 점, 간과할 수도 있는 점들을 소스 코드와 함께 설명한 부분이 제게는 상당히 매력적이었습니다.대표적인 예가 Handler 와 Looper, ANR 등의 설명이었는데요. 상당히 많은 지면을 할애하면서 설명하고 있습니다. 이 부분에서 어떤 컴포넌트가 어떻게 동작하고, 기본 원리는 어떠하며 실제로 UI 가 어떻게 동작하는 지, 잘못 사용했을 때 어떻게 되는지에 대해 차근차근 잘 설명해 주고 있습니다. 자세한 내용은 책을 사 보시는게 좋을 거 같아요.:)책을 읽으실 때, 처음에는 한번 통독하시고, 두 번 세 번 읽으면서 정독하시는 것이 좀더 좋을 거 같습니다. 그래서 저도 다시 읽고 있습니다.다시 한 번 말하지만 이 책은 안드로이드 개발을 어느 정도 해 보신 분들을 타겟으로 하고 있고요. 그 분들의 가려운 곳들을 긁어 주는 책으로 좋을 것 같다는 생각입니다.
모든 문제는 컴포넌트를 제대로 다루지 못하는 데서 생긴다!
이 책을 보려는 사람들이라면 안드로이드를 공부하기 위해 두꺼운 입문서를 따라하면서 오랜 시간을 보냈을 것이다. 근사한 앱을 상상했지만 고생해서 만든 앱에서는 늘상 문제가 발생한다. 입문서에 나오지 않는 문제들을 해결하기 위해 개발자 가이드를 읽고, 구글을 검색해 보지만 군더더기가 많아지고 꼼수만 늘어간다. 제대로 된 앱을 만들기 위해서는 결국 안드로이드의 기본 원리를 정확히 알고 제대로 활용해야 한다. 그러기 위해서는 안드로이드 내부 구조를 정확히 이해하고 있어야 한다. 그래야 컴포넌트를 적재적소에서 정확히 활용할 수 있고, 유지보수가 쉬우면서도 진화할 수 있는 제대로 된 앱을 만들 수 있다.
이 책은 안드로이드의 기본 원리를 이해하고 이를 올바르게 적용하는 것에 중점을 둔다. 그러면서도 실무적인 내용을 담았는데, 다른 책에서는 가볍게 다뤄지는 내용이라도 현장에서 중요하게 쓰이는 것에 많은 분량을 할애하였다. 안드로이드 내부 구조를 설명하는 책이나 강의가 있기는 하지만 수준이 높거나 실무에서 활용하는 법은 잘 다루지 않곤 한다. 이 책이 입문서를 보고 난 후 방황하는 독자에게 도움이 되었으면 한다.
1장 안드로이드 프레임워크
1.1 안드로이드 아키텍처 개요
1.1.1 애플리케이션
1.1.2 애플리케이션 프레임워크
1.1.3 안드로이드 런타임
1.1.4 라이브러리
1.1.5 리눅스 커널
1.2 프레임워크 소스
1.3 안드로이드 버전
1.3.1 호환성 모드
1.3.2 호환성 모드 동작 예시
1.3.3 단말 버전 체크
2장 메인 스레드와 Handler
2.1 UI 처리를 위한 메인 스레드
2.2 Looper 클래스
2.3 Message와 MessageQueue
2.4 Handler 클래스
2.4.1 Handler 생성자
2.4.2 Handler 동작
2.4.3 Handler 용도
2.4.4 Handler의 타이밍 이슈
2.5 UI 변경 메커니즘
2.6 ANR
2.6.1 ANR 타임아웃
2.6.2 프레임워크에서 ANR 판단
3장 백그라운드 스레드
3.1 HandlerThread 클래스
3.2 스레드 풀 사용
3.2.1 ThreadPoolExecutor 클래스
3.2.2 ScheduledThreadPoolExecutor 클래스
3.2.3 Executors 클래스
3.3 AsyncTask 클래스
3.3.1 백그라운드 스레드와 UI 스레드 구분
3.3.2 액티비티 종료 시점과 불일치
3.3.3 AsyncTask 취소
3.3.4 예외 처리 메서드 없음
3.3.5 병렬 실행 시 doInBackground() 실행 순서가 보장되지 않음
4장 Context
5장 액티비티
5.1 생명주기
5.1.1 액티비티 생명주기 다이어그램
5.1.2 생명주기 메서드 호출 시점
5.1.3 액티비티 시작 메서드
5.1.4 액티비티 전환 시 생명주기 메서드 호출
5.1.5 생명주기 메서드 사용 시 주의사항
5.2 구성 변경
5.2.1 리소스 반영
5.2.2 구성 변경으로 인한 액티비티 재시작
5.2.3 프레임워크 소스 확인
5.2.4 구성 한정자
5.2.5 데이터 복구
5.2.6 android:configChanges 속성
5.2.7 Configuration 클래스의 변수 확인
5.3 태스크
5.3.1 태스크 상태
5.3.2 dumpsys 명령어로 태스크 확인
5.3.3 taskAffinity 속성
5.3.4 태스크 속성 부여
5.4 〈activity-alias〉 선언
6장 서비스
6.1 스타티드 서비스
6.1.1 서비스 재시작 방식
6.1.2 멀티 스레드 이슈
6.1.3 외부 프로세스에서 암시적 인텐트로 서비스 시작
6.1.4 IntentService 클래스
6.1.5 서비스 중복 실행 방지
6.2 바운드 서비스
6.2.1 리모트 바인딩
6.2.2 로컬 바인딩
6.2.3 바인딩의 특성
6.2.4 Messenger 클래스
7장 콘텐트 프로바이더
7.1 SQLite
7.1.1 sqlite shell
7.1.2 DB 락 문제
7.1.3 SQLiteOpenHelper 클래스
7.2 콘텐트 프로바이더
7.2.1 로컬 프로세스에서 콘텐트 프로바이더 적용 기준
7.2.2 콘텐트 프로바이더 예제
7.2.3 배치 실행
7.3 SQLite/ContentProvider 관련 팁
7.3.1 쿼리 실행 확인
7.3.2 콘텐트 프로바이더 예외 확인
8장 브로드캐스트 리시버
8.1 브로드캐스트 리시버 구현
8.2 브로드캐스트 리시버 등록
8.2.1 브로드캐스트 리시버 정적 등록
8.2.2 브로드캐스트 리시버 동적 등록
8.3 오더드 브로드캐스트
8.4 스티키 브로드캐스트
8.5 LocalBroadcastManager 클래스
8.6 앱 위젯
8.6.1 앱 위젯의 특성
8.6.2 AppWidgetProvider 클래스
8.6.3 RemoteViews 클래스
8.6.4 앱 위젯 업데이트
8.6.5 유의할 점
9장 Application
9.1 앱 초기화
9.2 Application 콜백
9.2.1 ComponentCallbacks2 인터페이스
9.2.2 Application에 등록하는 콜백
9.3 프로세스 분리
9.3.1 프로세스 분리가 필요한 때
9.3.2 분리된 프로세스에서 Application은 새로 시작
9.3.3 프로세스 분리 시 주의할 점
10장 시스템 서비스
10.1 시스템 서비스 기본
10.2 dumpsys 명령어
10.3 시스템 서비스 이슈
10.3.1 빈번한 리모트 호출을 줄여야 함
10.3.2 전원 관리와 딥 슬립
10.3.3 알람 등록과 제거
11장 구현 패턴
11.1 싱글톤 패턴
11.1.1 싱글톤에 Context를 전달하는 방법
11.1.2 메모리 누수 검증
11.2 마커 인터페이스
11.3 Fragment 정적 생성
카테고리 없음