brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jan 03. 2019

Slices

Android Jetpack Slices

#01 Slices example


Slices는 앱 외부에 앱 콘텐츠를 표시할 수 있는 유연한 UI 템플릿입니다.

즉, 사용자가 내 앱을 직접 실행하지 않아도 내 앱에서 제공하는 콘텐츠를 이용하는 것이 가능해집니다.


앱 외부 : SliceView를 구현한 앱 (ex. Google Search, Google Assistant) or OS

앱 콘텐츠 : Anything

유연한 UI 템플릿 : Rich, Dynamic, Interactive 한 Slice UI 템플릿


https://developer.android.com/guide/slices/?hl=ko

2019.01월 기준으로 Slices 기능은 정식 오픈하지 않은 상태. (정식 오픈 일정도 아직 없음)




#01 Architectural


#02 Architectural


SlicePresenter : SliceView를 구현한 앱 (ex. Google Search, Google Assistant) or OS

SliceProvider : Content providers를 상속한(extends) 추상 클래스로, onBindSlice() 메서드에서 URI를 기반으로 Slice를 생성하여 제공




#02 구현


Prerequisites

Android Studio 3.2 or later. (필수는 아니지만 Slices 관련 Tool 들을 포함하고 있음.)

Android 4.4 (API level 19) or later.

Slice Viewer : 2018.12월 기준으로 Slices 가 정식 오픈하지 않았기 때문에 테스트를 위해서 직접 SliceView를 구현하거나, Google에서 제공하는 sample app 이 필요함.
https://developer.android.com/guide/slices/getting-started?hl=ko#run-the-slice-viewer




Build


build.gradle

dependencies {  
   //...     
   implementation "androidx.slice:slice-builders:1.0.0"  
   //...
}


AndroidManifest.xml


WizSliceProvider.java
SliceProvider를 상속한 WizSliceProvider 클래스를 생성합니다.

#03 WizSliceProvider


#onCreateSliceProvider 메서드를 통해, 초기화 후 true를 리턴합니다.
SliceView를 통해 미리 정의된 ("content://com.sh.test") Uri를 #onBindSlice 메서드를 통해 받을 수 있습니다.
path를 기반으로 파싱 후, Slice를 생성하고 반환합니다.
#04 WizSliceProvider.java
#05 buildItSlice method




# Delayed content


대부분의 콘텐츠들이 서버와 같은 다른 저장소에서 비동기로 가져오게 되어 있습니다.

이런 비동기 데이터들을 보여주고 업데이트하기 위해서 아래와 같이 구현할 수 있습니다.


콘텐츠를 보여주는 메서드(ex. #setSubtitle)에서 "boolean isLoading" 값을 "false"로 선언
비동기 처리 후, ContentResolver#notifyData(Uri) 메서드를 통해 SliceProvider#onBindSlice 메서드 재호출
#06 Delayed content




Slice templates


여러 타입의 row 들을 추가할 수 있는 ListBuilder를 기반으로 Slice를 생성할 수 있다.


자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://developer.android.com/guide/slices/templates?hl=ko




#03 예시


#07 예시


현재(2019.01) Slices를 이용하는 앱은 없지만, 아래 영상들을 보고 정리했습니다.

어떤 콘텐츠를 표시하든 기술적인 제한은 없지만, 구글에서는 너무 디테일하고 많은 콘텐츠를 표시하기보다는, 라이트하고 유저에게 맞춤화된 콘텐츠를 표시하기 권장하고 있습니다.


Android Slices: build interactive results for Google Search (Google I/O '18)

Android Slices Best Practices (Android Dev Summit '18)




작년 구글 I/O 때 소개된 내용인데, 아직 정식 출시를 하고 있지는 않습니다.

직접 서비스에서 이용해 보지 않았기 때문에 정확히는 모르겠지만, 개인적인 느낌으로 다른 앱에서 이용할 수 있는 홈 화면의 Widget 같은 느낌이네요.


아직은 테스트하기도 쉽지 않기에, 추후에 대응해도 될 거 같습니다.

작가의 이전글 2018년 회고
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari