目录
Android跨进程通信之小例子(一)
Android跨进程通信之非AIDL(二)
Android跨进程通信之Proxy与Stub(三)
Android跨进程通信之AIDL(四)
跨进程通信
跨进程通信
就是IPC
,IPC
就是跨进程通信
。因为每个进程都是独立的,有属于自己的内存空间,所以出于安全性考虑,最起码自己的东西不能随便就被人家操作。跨进程通信要比在同一进程中相互通信麻烦得多,限制也是比较多的。
对于Android而言,跨进程通信的方法有以下几种:
- 跨进程调用
Activity
: 简单提一下 - 使用
Content Provider
提供支持其他应用程序对数据进行增删改查
操作 : 不说 - 使用
Broadcast
去主动发送数据给其他的应用程序 : 不说 - 最后就是
Service
,也是这个系列中最啰嗦的一个部分。 : 重点说
跨进程调用Activity
其实跨进程调用Activity,我们在很多地方有使用到。只不过是我们没怎么去注意而已,毕竟人家称为
隐式调用
。。。
举个例子
举例子来说,我们平常利用系统的电话打电话,相机拍照,图库选取图片等等。都是使用了跨进程调用Activity的例子。
- 打电话
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678910" );
startActivity(callIntent);
- 拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
我们跟进去不难发现有两个常量,这两个常量其实就是一个称为
action
的东西,如果我们想自己的Activity可以被打开,设置Action是一种方法
public static final String ACTION_CALL = "android.intent.action.CALL";
public final static String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
Action的设置
其实Action的设置很简单,只要在
AndroidManifest.xml
配置即可。其中的action中的name属性必须是唯一的。否则多个APP会出现冲突。
<activity
android:name=".MyActivity"
android:label="@string/title_activity_my" >
<intent-filter>
<action android:name="top.august1996.myactivity"/>
</intent-filter>
</activity>
调起
要调用也很简单,为了说明情况。就不使用构造方法设置action了。
Intent intent = new Intent();
intent.setAction("top.august1996.myactivity");
startActivity(intent);
另一种隐式调用
如果你想去调用别人的Activity,可是别人没有设置Action,那就用下面这种方法。
startActivity(new Intent().setComponent(new ComponentName("top.august1996.example", "top.august1996.example.MyActivity")));
上面的
ComponentName
构造函数的第一个参数是Activity所在应用程序的包名
,第二个参数是Activity所在的包名+Activity的类名