Android进程间的通信

Activity

访问其他应用程序的Activity Activity既可以在进程内(同一个应用程序)访问,也可以跨进程访问。如果想在同一个应用程序中访问Activity,需要指定Context对象和Activity的Class对象。

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

startActivity(intent);

Activity的跨进程访问与进程内访问略有不同。

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678" );

startActivity(callIntent);

共享Activity:

1.  在AndroidManifest.xml文件中指定Action。指定Action要使用标签,并在该标签的android:name属性中指定Action

2.  在AndroidManifest.xml文件中指定访问协议。在指定Uri(Intent类的第2个参数)时需要访问协议。访问协议需要使 用标签的android:scheme属性来指定。如果该属性的值是“abc”,那么Uri就应该是“abc://Uri的主体 部分”,也就是说,访问协议是Uri的开头部分。

3.  通过getIntent().getData().getHost()方法获得协议后的Uri的主体部分。这个Host只是个称谓,并不一定是主机名。读者可以将其看成是任意的字符串。

4.  从Bundle对象中获得其他应用程序传递过来的数据。

5.  这一步当然是获得数据后做进一步的处理了。至于如何处理这些数据,就得根据具体的需求决定了。


Content Provider 

Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成增、删、改、查。Content Provider存在的目的向其他应用程序共享数据和允许其他应用程序对数据进行增、删、改操作。Android系统本身提供了很多Content Provider,例如,音频、视频、联系人信息等等。我们可以通过这些Content Provider获得相关信息的列表。这些列表数据将以Cursor对象返回。因此,从Content Provider返回的数据是二维表的形式。

BroadcastReceiver(广播)

只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。

Service

Service是在一段不定的时间运行在后台,不和用户交互应用组件。service是在主进程中被开启的。当主进程退出,而service还在服务。

Service的启动的两种方式:

a.使用context.startService() 启动Service(本地服务 Local Service 用于应用程序内部)

特点:使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。

其生命周期为context.startService() ->onCreate()- >onStart(可多次调用)->Service running-->context.stopService()  ->onDestroy() ->Service stop 

不论调用了多少次startService()方法,你只需要调用一次stopService()来停止服务。

b.对于bindService()启动Service()

特点:调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

其生命周期为context.bindService()->onCreate()->onBind()->Service running-->onUnbind() -> onDestroy() ->Service stop

你可能感兴趣的:(Android进程间的通信)