一、一般认为Android进程间通信方式有四种,其实就是四大组件的进程间通信方式。
这种网上将得非常清楚了:如一下文章
https://blog.youkuaiyun.com/baidu_29094221/article/details/78852998
只贴简单内容在这里
由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),在Android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service:
- Activity可以跨进程调用其他应用程序的Activity;
- ContentProvider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),
当然,也可以对其他应用程序的数据进行增、删、改操作; - Broadcast可以向android系统中所有应用程序发送广播,
而需要跨进程通讯的应用程序可以监听这些广播; - Service和Content Provider类似,也可以访问其他应用程序中的数据,
但不同的是,ContentProvider返回的是Cursor对象,
而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。
二、但是作为一个系统源码开发者,如果认为Android只有这四种跨进程间通信的方式,那就太肤浅了。起码还有以下几种
1、属性SystemProperties,该属性可以在不同的进程,不同的java文件中使用,
而且在C/C++代码中也有对应的访问接口,可谓非常之方便。不过还是要注意如果不是全局,还是尽量不要使用,因为存储属性
的容量有限,而且必须系统应用才能使用该特性。至于原理,就是Android开辟了一块特定的区域用于存储该值,这里就不详细阐述了
2、SettingsProvider:
SettingProvider用于存储和管理一些系统的默认值,并给其他模块提供了访问和修改的接口,Settings中的值大部分就是用这种方式进行存储和修改的。
3、Binder是Android进行进程间通信最底层的支持,AIDL其实也是用的也是Binder,系统那些Service和Manager之间也是用的Binder,Binder对Java层的使用是面向对象的,非常方便,对Binder属性的也可以直接使用Binder进行通信
学习Binder推荐Gityuan文章 http://gityuan.com/2015/10/31/binder-prepare/