最新android跨进程通信的库,Android随笔之——跨进程通信(一) Activity篇

在Android应用开发中,我们会碰到跨进程通信的情况,例如:你用QQ通讯录打电话的时候会调用系统的拨号应用、某些新闻客户端可以将新闻分享到QQ、微信等应用,这些都是跨进程通信的情况。简而言之,就是一个应用调用了另一个应用,并传递了一定的数据。在Android中有Activity、Content Provider、BroadcastReceiver、Service四大组件,巧的是Android进程间通信也离不开这四大组件(也有说是AIDL机制,但是现在还分不清Service和AIDL的区别(/ □ \) ),组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或者Service。

对于这四大组件,最常用也是最容易理解的就是Activity了,因为Activity是看得见摸得到的,所以跨进程通信也就先从Activity先讲起来。

Activity既可以在同一个进程内访问,也可以跨进程访问,是否跨进程访问的主要区别在于Intent是显示Intent还是隐式Intent。

Intent类型:

1、显示Intent——直接指定要启动的Activity类,一般用于同一个进程内的不同组件间通信,其格式为new Intent(this,Target.class);

//显示Intent,一般用于启动同一进程中的Activity

Intent intent = new Intent(this,OtherActivity.class);

startActivity(intent);

2、隐式Intent——一般用于跨进程通信,注册在AndroidManifest.xml文件中,其格式为intent.setAction(String action)。

//隐式Intent

Intent intent = newIntent();//设置Action,启动系统拨号界面,ACTION_CALL其实是字符串常量"android.intent.action.CALL"

intent.setAction(Intent.ACTION_CALL);

startActivity(intent);

既然知道了Activity间跨进程通信的主要取决于隐式Intent,那么,我们该如何实现隐式Intent呢?答案是正如上面所说,在AndroidManifest.xml文件中注册就行了。下面就又到了直接上代码的环节,代码注释中会穿插一些要注意内容。

创建一个OtherActivity的Android项目,将布局文件稍稍修改下:

接着,修改OtherActivity项目的AndroidManifest.xml文件:

接着,在创建一个Activity的Android项目,在其MainActivity中添加如下代码:

//新建一个Intent对象

Intent intent = newIntent();//设置Intent对象的Action,Action为OtherActivity配置文件中注册的action值

intent.setAction("com.lsj.otherActivity");//启动Activity

startActivity(intent);

先安装好OtherActivity,然后安装并运行Activity,你会发现OtherActivity已经被打开了。这就实现了Activity间跨进程通信,对于传递数据,可以用bundle或者intent。putExtras()来实现。

对于前面讲到的设置action可能会有这么个疑惑,如果一个Intent对应多种匹配结果该怎么处理呢?系统会根据组件的不同而不同对待,如果是service那么这些service都可以启动并处理消息;如果是Activity则会弹出一个对话框让用户进行选择。

作者:登天路

转载请说明出处:外链网址已屏蔽

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值