반응형
[android] Binder 와 Death Recipients 에 대한 이해 |
안드로이드는 기본적으로 multi-task 를 위해 만들어진 앱이다.
그래서 초창기에는 user 가 명시적으로 process 를 죽이지 못하도록 만들고, main activity 를 종료했을 때는 아주 낮은 priority 로 계속 process 를 살려둔다.
왜 그렇게 하냐?
app switching 이 일어날 때 process 를 처음부터 만들려고 하면 너무 많은 시간이 들기 때문이다.
그럼 process 들을 유지함으로서 메모리가 부족하면 어떻게 하냐?
해당 process 를 최소한의 정보를 보존한 후 죽인다.
그리고 해당 process 가 다시 launch 되면 최소한의 정보를 통해 어느 정도 선까지는 상태복구를 해준다.
( 참고로 Memory 로 인한 process kill 할 때는 어떤 life cycle 도 보장되지 않는다. 예를 들면 onDestory 가 불리지 않는다. )
해당 process 를 최소한의 정보를 보존한 후 죽인다.
그리고 해당 process 가 다시 launch 되면 최소한의 정보를 통해 어느 정도 선까지는 상태복구를 해준다.
( 참고로 Memory 로 인한 process kill 할 때는 어떤 life cycle 도 보장되지 않는다. 예를 들면 onDestory 가 불리지 않는다. )
Death Recipients
Death Recipients 를 통해 다른 process 가 kill 되었을 때 noti 를 받을 수있다.
1. Process 는 DeathRecipient Callback object 를 만든다.
2. 다른 Process 의 IBinder 를 얻어와서, IBinder.linkToDeath() 를 통해 해당 Process에 DeathRecipient 를 등록한다.
3. process 가 죽으면 DeathRecipient#binderDied() 가 호출된다.
WakeLock 에서 이 코드들을 찾아볼 수 있다.
사실 이 Death Recipient 는 개발자인 우리가 쓸 일은 별로 없지만,
그래도 모르는 것보다 항상 알고 있으면 더 좋다.
참고 : http://www.androiddesignpatterns.com/2013/08/binders-death-recipients.html
http://developer.android.com/intl/ko/reference/android/os/IBinder.DeathRecipient.html
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android] Ok Google (0) | 2016.04.09 |
---|---|
[android] Lollipop (LOS) 부터는 Notification Icon 에 색상을 넣을 수 없다? (0) | 2016.02.14 |
Long 을 Int 로 casting 할 때 다음을 고려하자. (0) | 2015.12.28 |
[android] 디컴파일링시 Plain Text 로 노출되면 안 되는 정보들 숨기기 (1) | 2015.12.24 |
[android] Thread Scheduling 에 대한 이야기 (0) | 2015.12.22 |
댓글