安卓跨进程几种方式简介
来源:互联网 发布:caffe slice layer 编辑:程序博客网 时间:2024/06/07 09:56
一、概述
由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),在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服务。
Activity
Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。
在android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。
- Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:12345678" );
- startActivity(callIntent);
Content Provider
Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成下面的工作
1. 查询数据
2. 修改数据
3. 添加数据
4. 删除数据
虽然Content Provider也可以在同一个应用程序中被访问,但这么做并没有什么意义。Content Provider存在的目的向其他应用程序共享数据和允许其他应用程序对数据进行增、删、改操作。
Android系统本身提供了很多Content Provider,例如,音频、视频、联系人信息等等。我们可以通过这些Content Provider获得相关信息的列表。这些列表数据将以Cursor对象返回。因此,从Content Provider返回的数据是二维表的形式。
广播(Broadcast)
广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。
在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。
Service
1.利用AIDL Service实现跨进程通信
这是我个人比较推崇的方式,因为它相比Broadcast而言,虽然实现上稍微麻烦了一点,但是它的优势就是不会像广播那样在手机中的广播较多时会有明显的时延,甚至有广播发送不成功的情况出现。
注意普通的Service并不能实现跨进程操作,实际上普通的Service和它所在的应用处于同一个进程中,而且它也不会专门开一条新的线程,因此如果在普通的Service中实现在耗时的任务,需要新开线程。
要实现跨进程通信,需要借助AIDL(Android Interface Definition Language)。Android中的跨进程服务其实是采用C/S的架构,因而AIDL的目的就是实现通信接口。
- 安卓跨进程几种方式简介
- 传送门:安卓跨进程访问四种方式
- 安卓 SharePreferences 跨进程获取数据
- 安卓中用TCP跨进程通信
- 安卓跨进程通信之AIDL使用入门
- 安卓操作系统简介
- 安卓简介
- 安卓简介二
- 安卓简介
- 安卓简介
- 安卓逆向简介
- 安卓Launcher 简介
- 【android学习】安卓设备实现触摸事件的监听,跨进程事件注入
- Android学习之跨进程通信安卓接口定义语言AIDL(一)
- Android学习之跨进程通信安卓接口定义语言AIDL(二)
- 安卓Theme属性简介
- 安卓编译系统简介
- 安卓位置服务简介
- 简单选择排序算法(Simple Selection Sort) Java实现
- c++实验5-数组分离
- c++实验五-项目一数组分离
- JMeter学习笔记21-如何添加思考时间
- 单目视觉定位测距的两种方式
- 安卓跨进程几种方式简介
- Unity5.x AssetBundle依赖项打包详解
- Springmvc前台通过ajax传值到后台用@RequestBody接收,报415/400错误
- 解读Batch Normalization
- listView.setEmptyView(view)
- flask结构
- linux多网卡绑定
- tensorflow tensorboard学习(转载1)
- 内线