window manager활용하기 곽근봉

Post on 16-Apr-2017

16 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

WindowManager

100% 활용하기

CTO 곽근봉 (kwak.keunbong@nbt.com)

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

1인 개발자

100명 조직

오늘의 이야기

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

그래서!

feat. WindowManager

제품 개발 방법

시장 정의문제 정의

솔루션 정의요구사항 도출

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

Top-Down Approach

Bottom-Up Approach

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

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

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

제품 출시vs

Top Down Approach Bottom Up Approach

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

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

제품 개발 방법

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

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

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

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

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

WindowManager

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

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

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

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

WindowManager

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

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

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

FloatingApplication

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

홈버튼Block

반응속도향상 홈버튼

Delay 회피

WindowManager 활용법

FloatingApplication

Floating Application활용법1

FloatingApplication

Floating Application활용법1

피그인

FloatingApplication

Floating Application활용법1

페이스북메신저

FloatingApplication

Floating Application활용법1

네이버

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

Home BTN Block활용법2

홈버튼Block

TouchLock

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;

반응속도향상활용법3

반응속도비교

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

View 재사용가능

반응속도향상활용법3

왜 빠른가?

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

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

홈BTN delay회피활용법4

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, 네비게이션바등을 모두막을 수 있기 때문에 주의해서써야한다.홈버튼을막는다.

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에넘긴다.

WindowManager 사용시 주의사항

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

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

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

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

* 잠금해제는 Activity Context만 가능

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

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

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

요약

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

진짜요약

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

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

마지막예시 하나 더

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

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

20. 업무공간

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

.

.

.

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

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

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

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

.

.

.

.

.

엔지니어

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

제품을 만들어내는 사람

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

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

문제를 정의하고

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

감사합니다.

CTO 곽근봉 (kwak.keunbong@nbt.com)

top related