调起其他APP的Activity或Service组件的注意点

最近在参考《Android开发艺术探索》学习跨进程通信,在写一个使用Messenger跨APP通信的小实例时,在调起另一个APP的组件时遇到几个值得注意的点,记录一下。

一、调起其他App的Activity组件

    1、隐式Intent调起方式,当使用action匹配规则,目标组件不要忘记添加默认的category规则。

  错误实例:

调起其他APP的Activity或Service组件的注意点_第1张图片
没有添加默认category规则

  正确实例:

调起其他APP的Activity或Service组件的注意点_第2张图片
正确实例

  点评:如果是隐式Intent,系统会默认加上一个android.intent.category.DEFAULT,因此如果目标组件中没有,隐式Intent就会匹配失败。

2、关于android:exported属性是否需要设置

android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。总体来说它的主要作用是:是否支持其它应用调用当前组件。 

点评:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。由于我们已经设置intent-filter,可以不用再设置android:exported="true".

二、调起其他App的Service组件

1、隐式Intent调起方式:在Android5.0以前可以通过隐式Intent方式启动其他App的Service,就跟Activity启动隐式Intent一样的。但是在5.0以后,只能使用显示的Intent方式启动了。

错误实例:

调起其他APP的Activity或Service组件的注意点_第3张图片
不能在5.0以后使用隐式Intent来启动其他APP的Service组件

正确实例:

调起其他APP的Activity或Service组件的注意点_第4张图片
正确实例

你可能感兴趣的:(调起其他APP的Activity或Service组件的注意点)