Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android ipm 20110409


Published on

Inter-process method invocation using Binder in Android.

Published in: Technology

Android ipm 20110409

  1. 1. Inter-process method invocation in Android 2011.4.9 Tetsuyuki Kobayashi 1
  2. 2. Who am I? 20+ years involved in embedded systems  10 years in real time OS, such as iTRON  10 years in embedded Java Virtual Machine  Now GCC, Linux, QEMU, Android, … Blogs  (Personal)  (Corporate) Twitter  @tetsu_koba 2
  3. 3. Todays topic inter process communications in Android Inter process method invocation using Binder AIDL Example of inter process method invocation 3
  4. 4. Inter Process Communication Activity Activity Window Alarm Manager Manager Manager Kernel 4
  5. 5. Abstraction of Inter Process Communication More abstract Intent AIDL Binder No need to use Binder directly. AIDL requires multi-thread programming 5 In most case Intent is easy and powerful enough.
  6. 6. Invoking method via interface caller callee In the same process 6
  7. 7. Inter-process invocation caller interfacecaller interface How?callee interface callee 7
  8. 8. Inter-process invocation caller interface Proxycaller interface Binder in kernel Binder Threadcallee Stub interface callee 8
  9. 9. android.os.Parcel Delivering arguments of method”flatten” ”unflatten” transmit 9
  10. 10. Describing in UML ... <<interface>> Proxy Stub 10
  11. 11. Describing in UML ... caller <<interface>> calls implements Proxy Stub extends callee 11
  12. 12. AIDLAuto generated from .aidl file caller <<interface>> Proxy Stub callee 12
  13. 13. Use case: Who calls ”onPause” in Activity? 2:Send message Activity by Handler 3:”onPause” is called queue Looper in main thread Activity Manager Main Main Binder Thread Thread Binder Thread #1 Thread #1 Kernel 1:Call ”schedulePauseActivity” across process 13
  14. 14. Binder /etc/binder Not for general purpose. Tuned for specific transaction. Multi-thread aware  Have internal data per thead  (CF. Socket have internal data per fd.) Not use ”write” and ”read”. Write and read at once by ”ioctl”. 14
  15. 15. Transaction of Binder Process A and B have different memory space. They can not see each other.Kernel Process B Process A Binder Copy memory by copy_from _user Then, wake up process BKernel Process B Binder Process A Copy memory by copy_to_user 15
  16. 16. See also rd 3 session of Yokohama Android Platform club  1st session of Android SDK work group  KMC blog       16
  17. 17. Q&AThank you for listening!Any comments to blogs are welcome. 17