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

[android] Binder 와 Death Recipients 에 대한 이해

by 돼지왕 왕돼지 2015. 12. 29.
반응형

 [android] Binder 와 Death Recipients 에 대한 이해


Android, app switching, binder, binderdied, Callback, death recipients, ibinder, Kill, launch, life cycle, linktodeath, main activity, multi-task, noti, notification, object, OnDestroy, priority, process, process kill, User, wakelock, [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 가 불리지 않는다. )




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

http://developer.android.com/intl/ko/reference/android/os/Binder.html#linkToDeath(android.os.IBinder.DeathRecipient, int)






반응형

댓글