android 进程通信
从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 点击打开链接