주간 안드로이드 뉴스 #198: Bottom Sheet, 메인쓰레드 주의사항 등

Android Weekly는 매주 발행되는 안드로이드 뉴스레터입니다. 영어 기사를 정독할 시간이 없는 분을 위해 핵심 꼭지를 요약했습니다.

주간 안드로이드 뉴스를 요약해 드립니다. Android Weekly 198 원문도 읽어보세요.


Android Support Library 23.2: Bottom Sheet

  • bottom sheet을 사용하려면 크게 두 가지 방법으로
  1. BottomSheetBehavior 사용(layout_behavior속성에 android.support.design.widget.BottomSheetBehavior추가)하거나
  2. 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가지 피해야 할 상황으로
    1. 메인쓰레드에서 네트워크 응답 파싱하기
    2. 암호키 생성
    3. 과한 초기화
    4. Asset 리스팅
    5. 동기화를

위한 대기를 제시합니다. 메인스레드 상태를 자주 확인해보시면서 더 효율적인 코드를 작성하시려는 분들께 도움이 될 글입니다.

  • 안드로이드 쓰레드 어노테이션으로 @UiThread, @WorkerThread 등이 있습니다. 이런 쓰레드 어노테이션은 메소드의 쓰레드 컨텍스트가 변하지 않을 때 사용하기 적합하다고 하는데요, 예를 들어
    1. 특정 쓰레드 API를 랩핑하기 위해(writeJSONObjectToDisk: worker thread, updateViewFromCursor: UI Thread)
    2. 특정 쓰레드 컨텍스트일 때(mergeDataFromDisk)
    3. Runnable이나 HandlerThread메소드
    4. 특정 쓰레드에서 콜백을 요청했을 때 콜백에서 사용되는 인터페이스
    5. 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 어플리케이션의 통합성을 저해하는지 설명하고 있습니다. 주 내용은

    1. Subject는 Observable처럼 예상할 수 있는 소스에서만 내주는 것을 보장하지 못하는 점
    2. 타이밍에 민감한 Hot Observable보다는 가능하다면 Cold Observable사용할 것
    3. Subject가 기본적으로 쓰레드 안전성을 보장하지 않는다는 점을 제시하고 있습니다.


생산성 향상을 위한 꿀팁!

  • LightCycle (Open-sourcing LightCycle for Android)에서 Activity나 Fragment를 LightCycle이라고 불리는 더 작은, 독립적인 컴포넌트로 다룰 수 있는 라이브러리 LightCycle를 소개합니다.

  • Google의 value type을 편리하게 다룰 수 있는 라이브러리인 AutoValue에 익스텐션이 추가되었습니다. AutoValue Extensions Parcelable과 Redacted 등 유용한 익스텐션 소개도 함께 하니 관심있으신 분들 확인해보시면 좋겠습니다~

더 읽을 거리

3월 다섯째 주의 기사를 Android Weekly 198 영어 원문에서 볼 수 있습니다.

지난 뉴스가 궁금하다면 아래 링크를 참고해 주세요.

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close