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

[Android/안드로이드] Bound Services 고급정보,

by 돼지왕 왕돼지 2012. 5. 21.
반응형




http://developer.android.com/guide/topics/fundamentals/bound-services.html 

- Local Binding 을 위해서는 Binder 를 상속하는 class 를 만들고 이 class 의 instance 를 return 해주면 된다.

- Global Binding 을 위한 방법은 aidl 외에도 Messenger 를 이용하는 방법도 있다. 이 방법에서 service 는 Handler 를 만들고 다른 종류의 Message object 를 handle 해준다. 그리고 client 에서도 Messenger 를 구현해서 Message 를 받는다. 결국 go and back 이 Message object 다. ( 이녀석은 Parcelable ) Messenger 는 sigle thread 로 request 를 queue 하기 때문에 thread-safe 하다. Messenger 방법도 결국은 AIDL base 이다.

- 대부분이 앱이 AIDL 을 사용하지 않기를 권고되고 있다. AIDL 은 multithreading 환경을 제공하기 떄문에 더 복잡해지기 때문이다. 

- BroadcastReceiver 에서는 service 에 binding 할 수 없다.

- onServiceDisconnected() 는 client 의 unbinding 에는 불리지 않는다. 이 녀석은 service 가 crash 하거나 process 가 kill 된 등의 에외적인 상황에서만 불린다.

- bind service 할 때는 항상 DeadObjectException 을 care 해야 한다. 이녀석은 connection 이 끊어지면 발생하는 녀석이며 remote method 에서 return 되어 온다.

- Object 는 process 를 건너서도 reference count 가 된다.
 
- onResume() 와 onPause() 에서는 bind & unbind 하는 것이 비추된다. 이 녀석은 service 의 kill & recreate 를 쉽게 조장하며, activity 간 transition 을 방해하기도 한다.

- onUnbind() 에서 true 를 return 하면, 다음번에 다시 bind 될때는 onRebind() 가 호출된다. 비록 onRebind() 는 null 을 return 하지만, client 는 IBinder 를 전달받는다.




도움이 되셨다면 손가락 꾸욱~




반응형

댓글