WEB开发网
开发学院手机开发Android 开发 Android组件间的交互和进程间IPC通信 阅读

Android组件间的交互和进程间IPC通信

 2010-07-21 01:09:00 来源:WEB开发网   
核心提示:<intent-filter><action android:name=”edwin.demo.actHttpVideoMan.Main” /><data android:scheme=”http” android:type=”video/*” /></intent-filte
  <intent-filter>
  <action android:name=”edwin.demo.actHttpVideoMan.Main” />
  <data android:scheme=”http” android:type=”video/*” />
  </intent-filter>
  </activity>

它表示窗体actHttpVideoMan能够处理来自web服务器的视频文件。这样的filter有什么作用呢?最典型的情况就是配合浏览器工作。浏览器在打开一个链接的时候首先会尝试显示这个链接对应的html页面,如果这个链接不是一个html页面,而是一个视频文件或者其他浏览器本身不能处理的格式的话,浏览器会使用隐式消息尝试开启一个能够处理这种数据格式的Activity来处理,浏览器发出的隐式消息就是一个包含data属性,其中URI scheme为http,数据类型为video/*的消息,如果有能够匹配这个intent的组件,例如我们上面的那个activity,浏览器就会启动这个窗体,接着这个窗体会根据data属性指定的URI去播放在线视频,如果没有可以处理这个intent的Activity,浏览器才会调用下载管理器下载文件。

隐式消息这个设计简单有效,它忽略了进程的细节,让IPC在一个更高的更接近人脑思维模式的层次工作,让系统中的不同进程协作看起来就像是同一程序中的协作一样,这种简单的IPC机制在很大的程度上鼓励我们和其他进程协作,通过协作的进程来完成一个复杂的任务,而不是把什么功能都做到一个大而全的程序里面。不过上文还有一些细节没有提到,例如如果一个intent有多个可匹配的处理组件,系统如何处理?这就要分响应消息的组件类型来说了,如果是 service,那么这些service都可以启动并处理消息,如果是Activity,则android会弹出一个对话框让用户进行选择。比如我们安装了多个可以处理在线视频的软件,当我们在浏览器中点击一个在线视频的链接时,系统会让用户选择使用哪个软件来观看。另外大家一定会想到安全性的问题,如果不同进程间的组件可以通过隐式消息互相通信,那我们的程序不是可以轻易调用到其他的程序或者系统中的一些敏感程序的组件,这样会不会很不安全呢?其实 Android在安全方面有一个统一,完备和轻便的安全策略模型,Intent的安全自然是被考虑在内的,关于android的安全模型我会在后续的系列 blog中专门说明。

最后,除了Intent这种基于消息的进程内和进程间通信模型外,android中也有一种相比起来稍显笨重一些的IPC机制,它采用类似远程方法调用的方案,通过接口定义文件AIDL来定义一个IPC接口,然后通过接收方实现接口,调用方调用接口的本地代理实现来完成IPC。这种模型只适用于

上一页  1 2 3 4  下一页

Tags:Android 组件 交互

编辑录入:coldstar [复制链接] [打 印]
赞助商链接