window manager활용하기 곽근봉

33
WindowManager 100% 활용하기 CTO 곽근봉 ([email protected]) 안드로이드만의 독특한 서비스 만들기

Upload: keunbong-kwak

Post on 16-Apr-2017

16 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Window manager활용하기 곽근봉

WindowManager

100% 활용하기

CTO 곽근봉 ([email protected])

안드로이드만의 독특한 서비스 만들기

Page 2: Window manager활용하기 곽근봉
Page 3: Window manager활용하기 곽근봉

1인 개발자

100명 조직

오늘의 이야기

Page 4: Window manager활용하기 곽근봉

오늘의 주제는 ‘기술과 제품’ 이야기

그래서!

feat. WindowManager

Page 5: Window manager활용하기 곽근봉

제품 개발 방법

시장 정의문제 정의

솔루션 정의요구사항 도출

제품 기획제품 개발제품 출시

Top-Down Approach

Bottom-Up Approach

새로운 기술의 발견기술의 습득

만들어보고싶은거 만들기그 제품으로 풀 수 있는 문제를 정의

문제를 더 잘 풀기 위한 개선패키징

제품 출시vs

Page 6: Window manager활용하기 곽근봉

Top Down Approach Bottom Up Approach

vs효율적이고 효과적이지만뻔한 제품이 나오기 쉽다.

독특한 서비스를 개발할 수 있지만,시장의 선택을 받지 못할 수 있다.

제품 개발 방법

Page 7: Window manager활용하기 곽근봉

좋은 제품을 만들기 위해서는두 가지의 방법이 모두 적용 되어야한다

비지니스 하는 사람들이기술의 트렌드를 기회로 인식할 수 있어야하고,

개발하는 사람들이현재 시장의 문제를 파악하고 있어야한다.

Page 8: Window manager활용하기 곽근봉

Top-Down식 제품 개발이 주도적인 상황에서어떻게 하면 Bottom-Up식 제품 개발과 조화를 이룰 수 있을지

개발자의 관점에서좋은 제품을 만들기 위한 방법을 알아보자

Page 9: Window manager활용하기 곽근봉

WindowManager

Page 10: Window manager활용하기 곽근봉

Window안드로이드에서사용자 눈에 보이는 모든 것들은Window를 가진다

즉, 눈에 보이는 것을 담는 가장 기본적인 공간

Window에레이아웃과 뷰들을 올려서 사용하는 것

Page 11: Window manager활용하기 곽근봉

Window

final void attach(Context context, ActivityThread aThread, …){. ..

mWindow = PolicyManager.makeNewWindow(this);

mWindow.setCallback(this);

mWindow.setWindowManager(null, mToken, mComponent.flattenToString(),(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);

mWindowManager = mWindow.getWindowManager();...

}

예시) 액티비티를 만들면자동으로 윈도우를 생성해서 붙여준다.

/core/java/android/app/Activity.java

Page 12: Window manager활용하기 곽근봉

WindowManager

Window는 그 자체로 사용하지 않고,WindowManager를 통해서 사용.

WindowManager는ViewManager를상속받았기 때문에,바로 view를 추가/수정/삭제할 수 있음.

View.LayoutParams를 상속받은WindowManager.LayoutParams를 통해독특한 윈도우를 만들 수 있다.

Page 13: Window manager활용하기 곽근봉

FloatingApplication

Activity의 제약조건(라이프사이클, 반응속도, Home버튼 Delay)를벗어나는 방법으로서 WindowManager가유용하다.

홈버튼Block

반응속도향상 홈버튼

Delay 회피

WindowManager 활용법

Page 14: Window manager활용하기 곽근봉

FloatingApplication

Floating Application활용법1

Page 15: Window manager활용하기 곽근봉

FloatingApplication

Floating Application활용법1

피그인

Page 16: Window manager활용하기 곽근봉

FloatingApplication

Floating Application활용법1

페이스북메신저

Page 17: Window manager활용하기 곽근봉

FloatingApplication

Floating Application활용법1

네이버

Page 18: Window manager활용하기 곽근봉

Activity Context와Window를분리

활용법1

WindowManager는Activity Context, Service Context, Application Context모두에서 사용가능

FloatingApplication

windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

windowManager.addView(view, layoutParam);

Floating Application

Page 19: Window manager활용하기 곽근봉

Home BTN Block활용법2

홈버튼Block

TouchLock

Page 20: Window manager활용하기 곽근봉

Home BTN Block활용법2

Type : 윈도우의노출, 터치, 포커스 우선순위를결정

Type 마다 특정 Context의 의존성

홈버튼Block

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();

layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

layoutParams.format = PixelFormat.TRANSPARENT;

Page 21: Window manager활용하기 곽근봉

반응속도향상활용법3

반응속도비교

Page 22: Window manager활용하기 곽근봉

Activity와Window 분리Activity Life Cycle을따르지 않음* Fluctutation이 없음.

View 재사용가능

반응속도향상활용법3

왜 빠른가?

Service Context로 WindowManager를 가져와서 구현어떻게?

Page 23: Window manager활용하기 곽근봉

홈버튼후런처를 제외한다른방식으로앱을실행하려는경우 5초 Delay를갖는 현상

홈BTN delay회피활용법4

Page 24: Window manager활용하기 곽근봉

WindowManager 주요 Type 소개

TYPE_APPLICATION가장 기본이 되는 type. Activity를 생성하면 이타입으로 윈도우가 생성된다.Activity Context로만 생성이 가능하다.Activity Context로 생성된 window는 Service Conxtext로 생성된 window보다 우선순위가낮다. (잠금시는 예외)

TYPE_PHONEService Context로 만들수 있는 윈도우 Type 중가장 우선순위가낮다.홈버튼을막지 않고 통과시킨다.

TYPE_SYSTEM_ERROR가장 우선순위가높은 Type 중하나. 거의 모든 View를덮을 수 있다.Status Bar, 네비게이션바등을 모두막을 수 있기 때문에 주의해서써야한다.홈버튼을막는다.

Page 25: Window manager활용하기 곽근봉

WindowManager 주요 Flag 소개

FLAG_DISMISS_KEYGUARDwindow가 attach되면잠금해제를 하는 flag. Activity Context를 가진 윈도우매니저에서만 동작

FLAG_LAYOUT_NO_LIMITSwindow가 화면을벗어나서도배치될수 있다. 숨기거나일부만 보이는 윈도우를 만들때 사용

FLAG_LAYOUT_IN_SCREENwindow가 보여지는 화면의전체영역을 가진다. status bar 혹은 navigation bar 영역까지도배치될수 있다.

FLAG_NOT_FOCUSABLE해당윈도우가 focus를 받지 않게된다.즉 home button이나 back button처럼 focus를 받아야 동작하는 것들을 다음 우선순위 window에넘긴다.

FLAG_NOT_TOUCH_MODAL해당윈도우가터치를 받지 않게된다. 터치가 오면 다음 우선순위 window에넘긴다.

Page 26: Window manager활용하기 곽근봉

WindowManager 사용시 주의사항

* 안드로이드 6.0 이상에서는 명시적으로 동의를 받아야하는퍼미션이다. (TYPE_PHONE 이상의경우)

* 외부 APK를설치할경우 Floating App이 있으면설치가 제한된다.

* 6.0 이상에서 다른앱들의 명시적 동의를 받아야하는경우에는 Floating App이 이슈가된다.

* Context별사용법을 정확히알아야한다.

* 잠금해제는 Activity Context만 가능

* 유튜브 SDK사용은 Activity Context만 가능등

* 디바이스별파편화가일부있다.

* 메모리관리를 잘 해야한다.

Page 27: Window manager활용하기 곽근봉

요약

WindowManager를 사용하면,Activity의 제약사항들(라이프사이클, 반응속도, 홈버튼처리)을뛰어넘어서 개발할 수 있다

Page 28: Window manager활용하기 곽근봉

진짜요약

Omni Swipe, TouchLock과같은 제품들이시장의 정의, 문제의 정의로부터시작했을까?

오히려 WindowManager 라는 기술의 발견Floating App, Home Block 이라는 기술의 습득에서부터시작하지 않았을까?

마지막예시 하나 더

Page 29: Window manager활용하기 곽근봉
Page 30: Window manager활용하기 곽근봉

1. 신뢰수준2. 업무자유도3. 협업4. 솔직한태도

5.고객피드백6. 수고에대한 인정7. 작업환경

20. 업무공간

어떤팀이 좋은팀인가? - InfoQ

.

.

.

Page 31: Window manager활용하기 곽근봉

1. 신뢰수준2. 팀원간의피드백3. 수고에대한 인정4. 협업

14. 끈끈한유대감14. 성공에대한축하

14. 고객피드백14. 정기적인 회고

어떤팀이 좋은팀인가? - Tech Planet 2016

.

.

.

.

.

Page 32: Window manager활용하기 곽근봉

엔지니어

제품을 만들어 주는 사람이 아닌

제품을 만들어내는 사람

단순히기술의 발견에만머무르지말고

보다 적극적으로 기술을 습득하고

문제를 정의하고

그것을창의적으로 해결해야한다.

Page 33: Window manager활용하기 곽근봉

감사합니다.

CTO 곽근봉 ([email protected])