zoukankan      html  css  js  c++  java
  • 4.1 进程间通信

      由于Android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在Android SDK中提供了四种用于跨进程通讯的方式。这四种方式正好对应于Android系统中四种应用程序组件:Activity、Content Provider、Broadcast和Service。其中:

    1) Activity可以跨进程调用其他应用程序的Activity

      Activity既可以在进程内(同一个应用程序)访问,也可以跨进程访问。

      Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的Class对象,而需要指定的是要访问的  Activity所对应的Action。有些Activity还需要指定一个Uri(通过Intent构造方法的第2个参数指定)。

    2) Content Provider

      Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。

      虽然Content Provider也可以在同一个应用程序中被访问,但这么做并没有什么意义。Content Provider存在的目的向其他应用程序共享数据和允许其他应用程序对数据进行增、删、改操作。

      Android系统本身提供了很多Content Provider,例如,音频、视频、联系人信息等等。我们可以通过这些Content Provider获得相关信息的列表。这些列表数据将以Cursor对象返回。因此,从Content Provider返回的数据是二维表的形式。对于访问Content Provider的程序,需要使用ContentResolver对象。该对象需要使用getContentResolver方法获得。

    3) Broadcast

      广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。在应用程序中只需要调用sendBroadcast方法即可发送广播。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。

    AIDL

      Service和Content Provider类似,也可以访问其他应用程序中的数据,但不同的是,Content Provider返回的是Cursor对象,而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。

      Android系统中的Service主要有两个作用:后台运行和跨进程通讯。后台运行就不用说了,当Service启动后,就可以在Service对象中 运行相应的业务代码,而这一切用户并不会察觉。而如果想让应用程序可以跨进程通讯,就要使用AIDL服务,AIDL的全称是Android Interface Definition Language。AIDL实际上是一种接口定义语言。通过这种语言定义接口后,Eclipse插件(ODT)会自动生成相应的Java代码接口代码。

  • 相关阅读:
    Class attributes
    Card objects
    Exercises
    Type-base dispatch
    Operator overloading
    The str method
    loadrunner协议开发
    nmon分析与详解
    如何判断CPU、内存、磁盘的性能瓶颈?
    用友NC客户端地址
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6061380.html
Copyright © 2011-2022 走看看