android 进程通信

来源:互联网 发布:阿里云os 魅族 编辑:程序博客网 时间:2024/06/05 16:43

从java web 转到android有一段时间了,虽然根据以前的功底,完成一些简单的android应用已经不成问题了。

但是,没有经过系统的学习过android,始终感觉自己开发的时候“底气不足”。

阅读了部分android的开发文档,android中最重要的几个组件即:activity,service,content provider, broadcast,intent。

这些组件学习的时候都很好理解,但是一旦牵扯混合的时候总感觉有点犯迷糊。一切的根源就在于Intent,因为Intent是连接其他组件的重要且唯一的工具。

android,把每个apk都当做一个单独的进程处理。进程之间的通信也就十分的重要了。

把android的进程通信分为两种:进程之间,和进程之内的。

进程之内的比较简单,通常都是用 Explicit intents 实现。

而进程之间的通信,需要是用Implicit intents进行实现。

(当然,如果进程内部,你使用Implicit intents也可以

通过Intent,去启动另一个activity ,service 或者发送一个broadcast。

当intent进行匹配activity,service或者broadcast的时候,就会发生一些情况。比如:你的intent 匹配了好多个,android怎么选择呢?

如果是activity,系统会弹出一个选择画面。如果是broadcast,所有的匹配项都会执行。如果是多个service呢?

由于对最后一种的疑惑,所以就借用搜索引擎学习了一番。

下面这个片文章将的非常好,有兴趣的同学可以去看看。

http://blog.csdn.net/homebei2/article/details/6205380?reload    点击打开链接

当然这篇文章也有不足之处;

一个Intent对应多种匹配结果的处理说明一个intent有多个可匹配的处理组件,系统如何处理?分响应消息的组件类型:1)如果是service那么这些service都可以启动并处理消息。2)如果是Activity则会弹出一个对话框让用户进行选择。

当一个intent有多个匹配结果的时候(进程之间的消息传递):

1)如果是activity,会弹出一个对话框让用户选择。

2)如果是service,那么这些service都会被启动,但是执行处理响应的只有一个,执行哪个,是系统自行解决的(测试的结果是哪个先安装执行哪个)

http://stackoverflow.com/questions/8381324/two-service-with-the-same-intent-filter  点击打开链接

3)如果是broadcast,那么所有的匹配结果都会被处理


进程之间能共享和传输数(intent能传输参数,但是它的主要功能不应该在这上面):

1)content provider

2)使用aidl service

content provider 的实现方法个人感觉不难。

aidl学习的时候有点慢,这里推荐一篇文章:http://blog.csdn.net/jyfllzy/article/details/6299678  点击打开链接

本人做的demo也分享给大家 http://download.csdn.net/detail/qiushibaiyi/5092725 点击打开链接

原创粉丝点击