AW199: 안드로이드 N Notification, 멀티윈도우 주의사항, IoT 등

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

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


안드로이드 N: 새로워진 알림창과 멀티윈도우 사용 주의점

  • 안드로이드 N에서 notification이 어마어마하게 바뀝니다! 그동안 알림창은 컨트롤이 제한된 부분이었는데요, 새로 추가된 notification의 특징은 무엇인지 하나씩 살펴보시죠.
  1. notification template : 기존 컴포넌트들의 위치를 재배열한 더 깔끔한 템플릿이 지원됩니다. 기존 코드를 사용하면 자동으로 템플릿이 바뀌니 새로 설정할 부분은 없지만 원하신다면 builder생성시 setColor()로 색을 변경하실 수 있습니다.
  2. Bundling: 관련된 알림들은 하나의 그룹으로 묶어 한개 헤더에 여러개 notification을 제시할 수 있습니다. setGroupSummary(), setGroup()을 추가해서 사용할 수 있습니다. 또한 action을 추가할 수도 있습니다.
  3. Reply action: RemoteInputAPI를 이용해 앱을 실행할 필요 없이 바로 notification 창에서 사용자들의 응답을 받을 수 있습니다! RemoteInput 인스턴스 생성, PendingIntent 생성 후 reply등 action을 생성한 뒤 notification builder에 추가하는 것과 사용자로부터 받은 데이터를 받아 처리하는 것까지 순차적으로 설명하고 있으니 코드 직접 참고해보시면 많은 도움이 될 것입니다!
  4. Heads-up notification: Marshmallow 때와 동작하는 방식은 같지만 레이아웃이 변경되었고 특별히 다른 점은 커스텀 레이아웃을 사용할 수 있다는 점입니다. 커스텀 레이아웃을 사용하는 것은 RemoteViews를 사용하는 것입니다.

이런 개발 뉴스를 더 만나보세요

일반 알림창뿐만 아니라 heads-up 알림에서도 아래 방법으로 커스토마이징이 가능합니다. 우선 확장되지 않는 일반 notification을 구현하려면 remoteview를 생성한 뒤 일반적으로 notification을 만들듯이 builder에서 setCustomContentView()로 넘겨주면됩니다. 만약 확장가능한 알림창을 만들고 싶다면 remoteview를 생성한 뒤 위 메소드 대신setCustomBigContentView()를 사용하시고요, 만약 두 가지를 모두 구현하신다면 각각의 remoteview를 생성한 뒤 위 방법으로 진행하시면 됩니다.

새로워진 notification 바로 구현해보세요!! 자세한 내용은 안드로이드N: 업드레이드된 Notification (Android N: Introducing upgraded Notifications)에서 참고하실 수 있습니다.

  • 멀티윈도우를 지원하면서 실상 새롭게 추가된 API는 많지 않습니다. 멀티윈도우 지원 여부 또는 밀티윈도운 모드인지에 대한 XML이 추가된 정도라는데요, 놀랍지 않나요? 다양한 한정자(qualifier)에 따라 디멘션이나 레이아웃, 드로어블, 메뉴, 레이아웃 등을 그에 맞춰 지원해주 안드로이드의 리소스 시스템이 바로 멀티윈도우의 핵심입니다. 윈도우 크기에 따라 configuration을 조정해 리소스 시스템의 기존 특징을 활용하는 것이죠. 이를 기반으로 멀티 윈도우를 준비하는 다섯가지 팁 (5 tips for preparing for Multi-window in Android N)에서 멀티윈도우에 관한 다섯 가지 팁을 드립니다.
  1. 적절한 Context 사용하기: Application 보다 Activity Context를 사용하세요.

  2. configuration 변화 잘 다루기: configuration변화는 빠르고 끊김이 없어야 함을 염두에 두고 menifest파일에 android:configChanges 속성을 추가해 멀티윈도우 관련 configuration변화를 처리하세요. onSaveInstanceState()에 저장된 상태를 새로운 configuration에서 reload시켜주되, onResume()에서 너무 많은 작업은 하지 않는게 좋습니다.

  3. orientation 처리하기: 먼저 주의할 점은 디바이스가 landscape이어도 여러분의 앱은 portrait상태(가로보다 높이가 클 때) 일 수 있다는 것입니다. 만약 안드로이드 N이 타겟이 아니라면 android:screenOrientation속성으로 화면 방향을 고정시키는 것이 멀티윈도우를 지원하지 않는다는 의미지만 N을 타겟한다면 해당 속성은 멀티윈도우 모드일 때 무시됩니다. android:immersive속성 역시 같은 룰을 따르고요, 런타임시 setRequestedOrientation()을 사용하는 것은 멀티윈도우 모드에서는 N이 타겟이든 아니든 무시됩니다.

  4. 모든 화면 사이즈에 대응 할 반응형 UI: 멀티윈도우에 따라 UI 변경이 필요하겠죠. 다양한 반응형 UI 패턴이 있으니 멀티윈도우에 따른 화면 변화를 구현할 때 사용해보세요.

  5. 다른 앱에서 불리는 Activity의 multi-window 지원: 멀티윈도우 상황에서 전체 task는 하나의 윈도우로 표시됩니다. 만약 한 태스크 스택에서 액티비티를 런칭하려면 해당 액티비티는 화면에 있던 액티비티를 대체해야하는데요, 이 때 주의할 점은 불려진 액티비티는 이를 실행시킨 액티비티와 같은 멀티윈도우 속성을 지니고 있어야 한다는 것입니다!

안드로이드와 IoT

  • 블루투스 프로그래밍은 IoT를 구현하는 중요한 요소임이 분명합니다. 그 동안 저에너지블루투스 코딩을 하시면서 수많은 비동기 콜백과 또 수많은 상태들을 다루느라 고생하신 분들께 희소식이 있습니다! RxAndroidBLE - 저에너지 블루투스 코딩을 위한 강력한 툴 (RxAndroidBLE - most powerful tool for Bluetooth Low Energy coding)에서 RxJava에 기반한 라이브러리를 소개합니다. 복잡한 API를 다루기 쉬운 reactive observavle로 구현하고 있는 이 라이브러리는
    1. 세련된 비동기 조작(read, write, notification) 지원
    2. Android 규준에 적합한 쓰레드 매니지먼트
    3. 커넥션 및 에러핸들링 조작 등을 지원합니다. dependency설정에서부터 client생성과 디바이스 찾기, 연결하기 등 단계별로 코드가 제시되어있느니 관심있는 분들은 꼭 참고해보세요~
  • Something O’Clock – Part 1에서 이제 막 출시된 안드로이드 웨어 앱 ‘Something O’Clock’을 가지고 연재를 시작합니다. 주 내용은 1. 웨어 디바이스에서 동작하는 앱, 2. 폰에서 동작하는 컴패니온 앱, 3. 관련 라이브러리소개를 다룬다고 하니 관심있는 분들은 이 연재에 주목하세요!

생산성 향상을 위한 꿀팁!

  • 구글의 AutoValue라이브러리의 편리함은 이미 많이들 알고 계시죠? 위 코드가 AutoValue를 사용하면 아래처럼 깔끔해집니다! 이것만으로도 굉장히 편리한 코딩이 가능했는데 AutoValue 1.2-rc1 릴리즈를 통해 몇가지 익스텐션이 추가로 지원됩니다. AutoValue소개 (An Introduction to AutoValue)에서는 특히 Parcelable을 구현하는 예제가 제시되고 있는데요, 이 외에도 Gson, Moshi, Cursor, With, Redacted 익스텐션 사용 예제 링크가 포함되어있습니다.

  • 각 화면과 관련된 레이아웃, 드로어블, 디멘션이 많다면 하나의 리소스 폴더에 모~든 것들을 몰아넣기 보다 각 화면마다 리소스 폴더를 생성해서 관리하는게 어떨까요? 안드로이드 프로젝트 구조 대안 (Android Project Structure - an alternative way)에서는 이를 어떻게 구현할 수 있는지 설명하고 있습니다. app.gradle 파일에 sourseSets를 수정하는 것으로 이제 보다 편리하게 폴더를 구분해보세요!

더 읽을 거리

4월 첫째 주의 기사를 Android Weekly 199 영어 원문에서 볼 수 있습니다.

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

컨텐츠에 대하여

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


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close