[android] Binder Tokens 에 대해 이해해보자. |
Binder Tokens
Binder 가 system 안에서 Unique ID 를 갖는것은 security 문제를 해결하는 데 도움이 된다.
-
Binder 가 쓰이는 가장 대표적인 예는 Service의 aidl 연결이나 WakeLock 등이 있겠다.
Window Tokens
-
WIndow Token 은 Window manager 가 사용하는 특별한 token 이다.
각 window 를 구별하는 데 사용된다.
-
WindowToken 은 다른 허가되지 않은 앱이 다른 app 위에 무언가를 그리는 것을 불허한다.
Window 를 새로 add 하거나 remove 할 때 자신의 window token 을 보내야 한다.
만약에 token 이 match 하지 않으면 BadTokenException 이 발생한다.
-
App 이 최초 실행될 때 ActivityManagerService 가 application window token 이라는 녀석을 만든다.
이 녀석은 App 의 top level container window 를 가르킨다.
activity manager 가 이 token 을 window manager 와 app 양방향으로 전달한다.
-
app 이 새로운 window 를 붙이거나 제거하려고 할 때 이 token 을 window manager 에 전달하게 된다.
-
Launcher 는 window token 을 이용해서 wallpaper window 와 통신이 가능하다.
예를 들어 sendWallpaperCommand( IBinder windowToken, String action, int x, int y, int z, Bundle extras) 에 사용된다.
-
InputMethodManager 한테도 windowToken 이 전달된다.
예를 들어 hideSoftInputFromWindow(IBinder windowToken, int flags ) 에 사용된다.
-
WindowManager 를 통해 addView( View, WindowManager.LayoutParams ) 를 호출할 때도
WindowManager.LayoutParams.token field 에 token 을 전달해야 한다.
그런데 사실 이는 getWindowManager() 를 호출할 때 자동으로 된다고 보면 된다.
결론
-
Binder token 은 security issue 로 대부분 개발자에게 hidden 된 상태이지만, 이해해 두면 좋은 점이 많다.
InputMethodManager 라던지 aidl 연결 등에 기본적으로 사용되고,
우리가 흔히 사용하는 dialog 를 통해 BadTokenException 을 볼 수 있기 때문!
참조 : http://www.androiddesignpatterns.com/2013/07/binders-window-tokens.html
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Render thread & Ripple ( Ripple 흉내내기 ) (0) | 2016.09.08 |
---|---|
[android] ViewAnimator 뭐하는 녀석이야? (0) | 2016.09.05 |
[Android] Ok Google (0) | 2016.04.09 |
[android] Lollipop (LOS) 부터는 Notification Icon 에 색상을 넣을 수 없다? (0) | 2016.02.14 |
[android] Binder 와 Death Recipients 에 대한 이해 (4) | 2015.12.29 |
댓글