Activity对象与Service对象在不同的进程(Process)里执行,各有不同的UID(unix user ID)。由于各自独立执行,所以Activity对象通常依赖Intent对象去请求Android启动所需要的Service。

就Service对象的开发者而言,Activity对象是属于外界(因为两者在不同的进程里执行)的软件,也大多是别人开发的。那么,Service对象如何确定这外来的对象是善意的呢? 这就是安全性的问题了。在Service类别里,可以做权限的检查,其常用指令如下图:



当Service确认了对方的善意,就将IBinder接口的参考 (Reference)传给Activity对象。Activity对象就能透过IBinder接口去使用Binder的服务了。如下图:



当Activity呼叫IBinder的transact()等函数时,会反向呼叫NotifyBinder子类别的onTransact()函数。此时,也可以进行安全检验,例如下图里的指令:

int uid = Binder.getCallingUID();

就能取得对方UID来检验它的身分等。还可以进行 checkCallingPermission()等检验。如下图:



经检验而确认来客是善意的,就启动BinderServer(如影音播放器)来提供实质的服务。
以上是就Service的开发者角度来看Android的IBinder的安全机制的有关概念。至于Android范例程序代码,在此节录文章里,就省略了。


转自http://dev.chinamobile.com/cmdn/wiki/index.php?doc-view-2411.html

更多相关文章

  1. Android(安卓)OOM:内存管理分析和内存泄露原因总结
  2. Android源码阅读技巧--查找开发者选项中显示触摸操作源码
  3. java/android 设计模式学习笔记(5)---对象池模式
  4. .NET开源了,Visual Studio开始支持 Android(安卓)和 iOS 编程并自
  5. ActivityThread的main方法究竟做了什么?
  6. Android(安卓)ButterKnife入门到放弃
  7. uni-app打包程序 Hbuilder X 用自有证书 苹果证书打包 ios App、
  8. Android实现多条Toast快速显示(强制中止上一条Toast的显示)
  9. 【产品思考】国内 Android(安卓)开发生态现状

随机推荐

  1. android:两个进程之间通过AIDL进行通信
  2. 腾讯优测优分享 | Android碎片化问题小结
  3. Android小应用——监控屏幕使用时间
  4. Android热修复和插件化(初识篇)
  5. 别再抱怨了,国内这么多优秀的Android资源
  6. Android(安卓)内功心法(1.6)——android
  7. 微软:WP不会授权给小OEM商以及山寨厂商
  8. Android中 3D 圆形旋转动态实现
  9. 【android 蓝牙开发——传统蓝牙】
  10. java/android String和List的区别