SlideShare a Scribd company logo
WindowManager
100% 활용하기
CTO 곽근봉 (kwak.keunbong@nbt.com)
안드로이드만의 독특한 서비스 만들기
Window manager활용하기 곽근봉
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는 그 자체
로 사용하지 않고,
WindowManag
er를 통해서 사용.
WindowManager는
ViewManager를
상속받았기 때문에,
바로 view를 추가/수정/삭
제
할 수 있음.
View.LayoutParams를 상속받은
WindowManager.LayoutParams를 통
해
독특한 윈도우를 만들 수 있다.
Floating
Application
Activity의 제약조건(라이프사이클, 반응속도, Home버튼 Delay)를
벗어나는 방법으로서 WindowManager가 유용하다.
홈버튼
Block
반응속도
향상 홈버튼
Delay 회피
WindowManager 활용법
Floating
Application
Floating Application
활용법1
Floating
Application
Floating Application
활용법1
피그인
Floating
Application
Floating Application
활용법1
페이스북
메신저
Floating
Application
Floating Application
활용법1
네이버
Activity Context와 Window를 분리
활용법1
WindowManager는
Activity Context, Service Context, Application Context
모두에서 사용가능
Floating
Application
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_PHONE
Service Context로 만들수 있는 윈도우 Type 중 가장 우선순위가 낮다.
홈버튼을 막지 않고 통과시킨다.
TYPE_SYSTEM_ERROR
가장 우선순위가 높은 Type 중 하나. 거의 모든 View를 덮을 수 있다.
Status Bar, 네비게이션바 등을 모두 막을 수 있기 때문에 주의해서 써야한다.
홈버튼을 막는다.
WindowManager 주요 Flag 소개
FLAG_DISMISS_KEYGUARD
window가 attach되면 잠금해제를 하는 flag. Activity Context를 가진 윈도우매니저에서만 동작
FLAG_LAYOUT_NO_LIMITS
window가 화면을 벗어나서도 배치될 수 있다. 숨기거나 일부만 보이는 윈도우를 만들때 사용
FLAG_LAYOUT_IN_SCREEN
window가 보여지는 화면의 전체 영역을 가진다. 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 이라는 기술의 습득에서부터 시작하지 않았을까?
마지막 예시 하나 더
Window manager활용하기 곽근봉
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)

More Related Content

PPTX
Introduction to docker
PPTX
Rancher と GitLab を使う3つの理由
PPTX
20220302_TechDojo_OpenShift_BootCamp_1章概要
PPTX
Secure your app with keycloak
PDF
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
PDF
도메인 주도 설계의 본질
PDF
MuleSoft Surat Virtual Meetup#35 - Setting up MuleSoft Runtime and Anypoint C...
PPTX
SCUGJ第22回勉強会:オンプレのL2 NetworkをAzureに延伸? Azure Extended Network
Introduction to docker
Rancher と GitLab を使う3つの理由
20220302_TechDojo_OpenShift_BootCamp_1章概要
Secure your app with keycloak
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
도메인 주도 설계의 본질
MuleSoft Surat Virtual Meetup#35 - Setting up MuleSoft Runtime and Anypoint C...
SCUGJ第22回勉強会:オンプレのL2 NetworkをAzureに延伸? Azure Extended Network

What's hot (20)

PDF
(2014년) Active Active 데이터센터
PDF
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
PDF
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
PDF
멀티·하이브리드 클라우드 구축 전략 - 네이버비즈니스플랫폼 박기은 CTO
PDF
Red Hat OpenShift Container Platform Overview
PDF
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
PDF
VDI Best Practices
PPTX
Docker 101 - Nov 2016
PPTX
Introduction to microservices
PDF
Kafka slideshare
PDF
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
ODP
Kubernetes Architecture
PPTX
z/OS Connect Enterprise Edition V2.0.0.0 Technical Overview
PDF
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
PDF
Networking in Docker
PPTX
Introduction to Cloud and Eucalyptus
PDF
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
PDF
Virtualization Architecture & KVM
PDF
API Gateway를 이용한 토큰 기반 인증 아키텍처
PDF
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
(2014년) Active Active 데이터센터
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
멀티·하이브리드 클라우드 구축 전략 - 네이버비즈니스플랫폼 박기은 CTO
Red Hat OpenShift Container Platform Overview
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
VDI Best Practices
Docker 101 - Nov 2016
Introduction to microservices
Kafka slideshare
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
Kubernetes Architecture
z/OS Connect Enterprise Edition V2.0.0.0 Technical Overview
Authlete: セキュアな金融 API 基盤の実現と Google Cloud の活用 #gc_inside
Networking in Docker
Introduction to Cloud and Eucalyptus
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
Virtualization Architecture & KVM
API Gateway를 이용한 토큰 기반 인증 아키텍처
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
Ad

More from keunbong kwak (13)

PDF
그로스해킹 기초
PDF
NBT 그로스해킹 교육 자료
PPTX
PR-099: MRNet-Product2Vec
PDF
PR12 논문 리뷰 Distributed Representations of Sentences and Documents
PDF
Wide&Deep Learning for Recommender Systems
PDF
논문리뷰: Deep Neural Networks for YouTube Recommendations
PPTX
Ad Tech 개요
PDF
Ask me anything: Dynamic memory networks for natural language processing
PDF
GloVe:Global vectors for word representation
PPTX
딥러닝 논문 리뷰 Learning phrase representations using rnn encoder decoder for stati...
PPTX
에디터스랩 발표
PPTX
Convolutional neural networks for sentence classification
PDF
NBT 유클라우드 사례 발표
그로스해킹 기초
NBT 그로스해킹 교육 자료
PR-099: MRNet-Product2Vec
PR12 논문 리뷰 Distributed Representations of Sentences and Documents
Wide&Deep Learning for Recommender Systems
논문리뷰: Deep Neural Networks for YouTube Recommendations
Ad Tech 개요
Ask me anything: Dynamic memory networks for natural language processing
GloVe:Global vectors for word representation
딥러닝 논문 리뷰 Learning phrase representations using rnn encoder decoder for stati...
에디터스랩 발표
Convolutional neural networks for sentence classification
NBT 유클라우드 사례 발표
Ad

Window manager활용하기 곽근봉

  • 1. WindowManager 100% 활용하기 CTO 곽근봉 (kwak.keunbong@nbt.com) 안드로이드만의 독특한 서비스 만들기
  • 4. 오늘의 주제는 ‘기술과 제품’ 이야기 그래서! feat. WindowManager
  • 5. 제품 개발 방법 시장 정의 문제 정의 솔루션 정의 요구사항 도출 제품 기획 제품 개발 제품 출시 Top-Down Approach Bottom-Up Approach 새로운 기술의 발견 기술의 습득 만들어보고싶은거 만들기 그 제품으로 풀 수 있는 문제를 정의 문제를 더 잘 풀기 위한 개선 패키징 제품 출시vs
  • 6. Top Down Approach Bottom Up Approach vs 효율적이고 효과적이지만 뻔한 제품이 나오기 쉽다. 독특한 서비스를 개발할 수 있지만, 시장의 선택을 받지 못할 수 있다. 제품 개발 방법
  • 7. 좋은 제품을 만들기 위해서는 두 가지의 방법이 모두 적용 되어야한다 비지니스 하는 사람들이 기술의 트렌드를 기회로 인식할 수 있어야하고, 개발하는 사람들이 현재 시장의 문제를 파악하고 있어야한다.
  • 8. Top-Down식 제품 개발이 주도적인 상황에서 어떻게 하면 Bottom-Up식 제품 개발과 조화를 이룰 수 있을지 개발자의 관점에서 좋은 제품을 만들기 위한 방법을 알아보자
  • 10. Window 안드로이드에서 사용자 눈에 보이는 모든 것들은 Window를 가진다 즉, 눈에 보이는 것을 담는 가장 기본적인 공간 Window에 레이아웃과 뷰들을 올려서 사용하는 것
  • 11. 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
  • 12. WindowManager Window는 그 자체 로 사용하지 않고, WindowManag er를 통해서 사용. WindowManager는 ViewManager를 상속받았기 때문에, 바로 view를 추가/수정/삭 제 할 수 있음. View.LayoutParams를 상속받은 WindowManager.LayoutParams를 통 해 독특한 윈도우를 만들 수 있다.
  • 13. Floating Application Activity의 제약조건(라이프사이클, 반응속도, Home버튼 Delay)를 벗어나는 방법으로서 WindowManager가 유용하다. 홈버튼 Block 반응속도 향상 홈버튼 Delay 회피 WindowManager 활용법
  • 18. Activity Context와 Window를 분리 활용법1 WindowManager는 Activity Context, Service Context, Application Context 모두에서 사용가능 Floating Application windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); windowManager.addView(view, layoutParam); Floating Application
  • 20. 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;
  • 22. Activity와 Window 분리 Activity Life Cycle을 따르지 않음 * Fluctutation이 없음. View 재사용가능 반응속도 향상 활용법3 왜 빠른가? Service Context로 WindowManager를 가져와서 구현어떻게?
  • 23. 홈 버튼 후 런처를 제외한 다른 방식으로 앱을 실행하려는 경우 5초 Delay를 갖는 현상 홈BTN delay회피 활용법4
  • 24. WindowManager 주요 Type 소개 TYPE_APPLICATION 가장 기본이 되는 type. Activity를 생성하면 이 타입으로 윈도우가 생성된다. Activity Context로만 생성이 가능하다. Activity Context로 생성된 window는 Service Conxtext로 생성된 window보다 우선순위가 낮다. (잠금시는 예외) TYPE_PHONE Service Context로 만들수 있는 윈도우 Type 중 가장 우선순위가 낮다. 홈버튼을 막지 않고 통과시킨다. TYPE_SYSTEM_ERROR 가장 우선순위가 높은 Type 중 하나. 거의 모든 View를 덮을 수 있다. Status Bar, 네비게이션바 등을 모두 막을 수 있기 때문에 주의해서 써야한다. 홈버튼을 막는다.
  • 25. WindowManager 주요 Flag 소개 FLAG_DISMISS_KEYGUARD window가 attach되면 잠금해제를 하는 flag. Activity Context를 가진 윈도우매니저에서만 동작 FLAG_LAYOUT_NO_LIMITS window가 화면을 벗어나서도 배치될 수 있다. 숨기거나 일부만 보이는 윈도우를 만들때 사용 FLAG_LAYOUT_IN_SCREEN window가 보여지는 화면의 전체 영역을 가진다. status bar 혹은 navigation bar 영역까지도 배치될 수 있다. FLAG_NOT_FOCUSABLE 해당 윈도우가 focus를 받지 않게 된다. 즉 home button이나 back button처럼 focus를 받아야 동작하는 것들을 다음 우선순위 window에 넘긴다. FLAG_NOT_TOUCH_MODAL 해당 윈도우가 터치를 받지 않게 된다. 터치가 오면 다음 우선순위 window에 넘긴다.
  • 26. WindowManager 사용시 주의사항 * 안드로이드 6.0 이상에서는 명시적으로 동의를 받아야하는 퍼미션이다. (TYPE_PHONE 이상의 경우) * 외부 APK를 설치할 경우 Floating App이 있으면 설치가 제한된다. * 6.0 이상에서 다른 앱들의 명시적 동의를 받아야하는 경우에는 Floating App이 이슈가 된다. * Context별 사용법을 정확히 알아야한다. * 잠금해제는 Activity Context만 가능 * 유튜브 SDK사용은 Activity Context만 가능 등 * 디바이스별 파편화가 일부 있다. * 메모리 관리를 잘 해야한다.
  • 27. 요약 WindowManager를 사용하면, Activity의 제약사항들(라이프사이클, 반응속도, 홈버튼 처리)을 뛰어 넘어서 개발할 수 있다
  • 28. 진짜요약 Omni Swipe, TouchLock과 같은 제품들이 시장의 정의, 문제의 정의로부터 시작했을까? 오히려 WindowManager 라는 기술의 발견 Floating App, Home Block 이라는 기술의 습득에서부터 시작하지 않았을까? 마지막 예시 하나 더
  • 30. 1. 신뢰수준 2. 업무 자유도 3. 협업 4. 솔직한 태도 5.고객 피드백 6. 수고에 대한 인정 7. 작업 환경 20. 업무 공간 어떤 팀이 좋은 팀인가? - InfoQ . . .
  • 31. 1. 신뢰수준 2. 팀원 간의 피드백 3. 수고에 대한 인정 4. 협업 14. 끈끈한 유대감 14. 성공에 대한 축하 14. 고객 피드백 14. 정기적인 회고 어떤 팀이 좋은 팀인가? - Tech Planet 2016 . . . . .
  • 32. 엔지니어 제품을 만들어 주는 사람이 아닌 제품을 만들어 내는 사람 단순히 기술의 발견에만 머무르지 말고 보다 적극적으로 기술을 습득하고 문제를 정의하고 그것을 창의적으로 해결해야한다.