Android Weekly는 매주 발행되는 안드로이드 뉴스레터입니다. 영어 기사를 정독할 시간이 없는 분을 위해 핵심 꼭지를 요약했습니다.
주간 안드로이드 뉴스를 요약해 드립니다. Android Weekly 198 원문도 읽어보세요.
Android Support Library 23.2: Bottom Sheet
- bottom sheet을 사용하려면 크게 두 가지 방법으로
- BottomSheetBehavior 사용(layout_behavior속성에 android.support.design.widget.BottomSheetBehavior추가)하거나
- BottomSheetDialogFragment를 사용할 수 있습니다.
디자인 서포트 라이브러리를 이용한 Bottom sheet 사용하기(Use Bottom Sheets With the Design Support Library)에서 이 두 가지 방법으로 구현하는 방법 모두 확인하실 수 있습니다. 주의할 점은 컨테이너로 CoordinatorLayout을 사용해야 한다는 것과 스크롤을 사용하려면 NestedScrollView나 RecyclerView를 사용하셔야 한다는 것입니다.
추가적으로 BottomSheetBehavior.STATE_EXPANDED
, BottomSheetBehavior.STATE_COLLAPSED
를 사용할 때 Place Picker(Places API)를 이용해서 원하는 높이를 지정하시는 것까지 따라해보시면서 쉽게 Bottom sheet 적용 해보세요!
메인 쓰레드
- 보통은 메인쓰레드에서 네트워크 연결이나, 데이터 저장 등 Strict Mode에 걸리는 작업은 안하실 겁니다. 그런데 이 외에도 메인쓰레드를 붙잡고 있을 수 있는(hang method) 다양한 상황이 있는데요, 이렇게 어떤 메소드가 불렸을 때 메인 스레드가 16*N 밀리세컨 만큼 대기하게 되면서 N프레임을 놓치게(drop) 되는 것을 일컬어 hung method라고 하겠습니다. 메인 쓰레드를 멈추게하는 5가지 방법(Five Lesser-Known Ways to Hang Your Main Thread)에서 이와 관련해 흔히 알려지지 않은 5가지 피해야 할 상황으로
- 메인쓰레드에서 네트워크 응답 파싱하기
- 암호키 생성
- 과한 초기화
- Asset 리스팅
- 동기화를
위한 대기를 제시합니다. 메인스레드 상태를 자주 확인해보시면서 더 효율적인 코드를 작성하시려는 분들께 도움이 될 글입니다.
- 안드로이드 쓰레드 어노테이션으로
@UiThread
,@WorkerThread
등이 있습니다. 이런 쓰레드 어노테이션은 메소드의 쓰레드 컨텍스트가 변하지 않을 때 사용하기 적합하다고 하는데요, 예를 들어- 특정 쓰레드 API를 랩핑하기 위해(writeJSONObjectToDisk: worker thread, updateViewFromCursor: UI Thread)
- 특정 쓰레드 컨텍스트일 때(mergeDataFromDisk)
- Runnable이나 HandlerThread메소드
- 특정 쓰레드에서 콜백을 요청했을 때 콜백에서 사용되는 인터페이스
- public API사용이 그렇습니다.
그런데 주의할 점이 있습니다! 만약 코드 가독성을 높이기 위해 어노테이션이 붙은 메소드를 랩핑하면 어노테이션이 작동하지 는다는 것이죠. 이럴 때는 랩핑한 메소드에 추가적으로 어노테이션을 명시해주셔야 기대한대로 warning을 보실 수 있으니 이 점 코딩하실 때 참고하세요. 안드로이드 쓰레드 어노테이션의 단점(The Shortcomings of Android Thread Annotations)에서 몇 가지 사례를 제시하고 있으니 관심있는 분들은 확인해보시면 좋겠습니다.
RxJava
-
RxJava 적용 사례: Airbnb(Adopting RxJava on Airbnb Android, with Felipe Lima)에서 Airbnb에 새로운 기술과 패러다임을 적용하면서 그 동기와, 실제 구현할 때의 어려움 그리고 경험에서 배운게된 점들을 다루고 있습니다. imperative 와 reactive 접근을 비교하면서 각각의 장단점을 논의하니, 실제 사례를 통한 생생한 후기 확인해보세요.
-
Reactive 프로그래밍을 새로 접하시는 분들은 Observable이자 Subscriber인 Subject를 마냥 좋아하실 수도 있지만, 자칫하면 reactive프로그래밍의 장점을 활용하지 못할 수 있습니다. RxJava-Subject관련 문제(RxJava - The Problem with Subjects)에서 이상적으로 Observable 체인이 어떻게 작동해야하는지 설명한 뒤, Subjects가 어떻게 reactive 어플리케이션의 통합성을 저해하는지 설명하고 있습니다. 주 내용은
- Subject는 Observable처럼 예상할 수 있는 소스에서만 내주는 것을 보장하지 못하는 점
- 타이밍에 민감한 Hot Observable보다는 가능하다면 Cold Observable사용할 것
- Subject가 기본적으로 쓰레드 안전성을 보장하지 않는다는 점을 제시하고 있습니다.
- RxJava의 Observable을 통해 수많은 메소드와 익스텐션을 사용할 수 있지만 나만의 reactive 타입을 만들고 싶으신 분들께 도움이 될 글입니다! 고급 RxJava: 리액티브 베이스 타입 직접 만들기(Advanced RxJava: Writing a custom reactive base type)에서 Wrapping으로 시작해 Interoperation, Extension 순으로 차근히 자신만의 타입을 완성해 보세요.
생산성 향상을 위한 꿀팁!
-
LightCycle (Open-sourcing LightCycle for Android)에서 Activity나 Fragment를 LightCycle이라고 불리는 더 작은, 독립적인 컴포넌트로 다룰 수 있는 라이브러리 LightCycle를 소개합니다.
-
Google의 value type을 편리하게 다룰 수 있는 라이브러리인 AutoValue에 익스텐션이 추가되었습니다. AutoValue Extensions Parcelable과 Redacted 등 유용한 익스텐션 소개도 함께 하니 관심있으신 분들 확인해보시면 좋겠습니다~
더 읽을 거리
3월 다섯째 주의 기사를 Android Weekly 198 영어 원문에서 볼 수 있습니다.
지난 뉴스가 궁금하다면 아래 링크를 참고해 주세요.
- 주간 안드로이드 뉴스 #197 한글 요약
- 주간 안드로이드 뉴스 #196 한글 요약
- 주간 안드로이드 뉴스 #195 한글 요약
- 주간 안드로이드 뉴스 #194 한글 요약
- 주간 안드로이드 뉴스 #193 한글 요약
- 주간 안드로이드 뉴스 #192 한글 요약
컨텐츠에 대하여
이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.