본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Binder Tokens 에 대해 이해해보자.

by 돼지왕 왕돼지 2016. 5. 26.
반응형

 [android] Binder Tokens 에 대해 이해해보자.


32 bit, activitymanager, ActivityManagerService, ADD, addView, AIDL, Android, application window token, badtokenexception, binder, binder token, Dialog, getWindowManager, Hidden, hideSoftInputFromWindow, ibinder, inputmethodmanager, launcher, layouparams, object, remove, Security, sendWallpaperCommand, Service, System, token, top level container window, unique id, wakelock, wallpaper, wallpaper window, window, window manager, window token, window tokens, WindowManager, windowtoken, [android] Binder Tokens 에 대해 이해해보자., 이해


Binder Tokens


-
Binder object 는 system 에서 하나의 Unique ID ( 32-bit )를 갖는다.

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





반응형

댓글