由于android 系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK 中提供了4 种用于跨进程通讯的方式。这4种方式正好对应于android 系统中4 种应用程序组件:Activity、Content Provider、Broadcast和 Service。其中Activity 可以跨进程调用其他应用程序的Activity;Content Provider 可以跨进程访问其他应用程序中的数据(以 Cursor 对象形式返回),当然,也可以对其他应用程序的数据进行增、删、改操作;Broadcast 可以向 android 系统中所有应用程序发送广播,而需要跨进程通讯的应用程序可以监听这些广播;Service 和 Content Provider 类似,也可以访问其他应用程序中的数据,但不同的是,Content Provider 返回的是 Cursor 对象,而Service 返回的是 Java 对象,这种可以跨进程通讯的服务叫 AIDL 服务。 完整示例请参阅本文提供的源代码。 方式一:访问其他应用程序的Activ ity Activity 既可以在进程内(同一个应用程序)访问,也可以跨进程访问。如果想在同一个应用程序中访问 Activity,需要指定 Context 对象和 Activity 的Class 对象,代码如下: 1. Intent intent = new Intent(this , Test.class ); 2. startActivity(intent); Activity 的跨进程访问与进程内访问略有不同。虽然它们都需要 Intent 对象,但跨进程访问并不需要指定 Context 对象和 Activity 的 Class 对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity 还需要指定一个 Uri(通过 Intent 构造方法的第 2 个参数指定)。 在android 系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。 1. Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678" ); 2. startActivity(callIntent); 执行上面的代码后,系统会自动拨号,界面如图 1 所示。 在调用拨号程序的代码中使用了一个Intent.ACTION_CALL 常量,该常量的定义如下: 1. public static final String ACTION_CALL = "android.intent.action.CALL" ; 这个常量是一个字符串常量,也是我们在这节要介绍的跨进程调用Activ ity 的关键。如果在应用程序中要共享某个Activ ity ,需要为这个 Activ ity 指定一个字符串ID,也就是Action。也可以...