Android进程间通信机制

本文介绍了Android进程间通信(IPC)的相关知识,包括进程和线程的概念、区别,多线程的作用,以及Android中四种主要的IPC方式:序列化、Bundle、Messenger和AIDL。详细阐述了每种通信方式的定义、应用场景和代码实现,帮助理解Android系统中进程间的交互。
摘要由CSDN通过智能技术生成

进程/线程简介及区别

什么是进程?


狭义:进程是正在运行的程序的实例。
广义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

什么是线程

程序中单一的顺序控制流程
进程内相对独立的、可调度的执行单元
系统独立调度和分派CPU的基本单位

进程线程区别

 
一个进程至少有一个线程
进程可以包含多个线程
进程在执行过程中拥有独立的内存空间,而线程运行在进程内

 

演示

进程代码实现
一个Application一个进程

扩展Thread类

new Thread(new Runnable() {
@Override
public void run() {
Log.d(TAG, "current thread name:"+Thread. currentThread().getName ()
).start();


实现Runnabl接口

implements Runnable

2. 多线程的作用

什么是多进程?..
狭义:进程是正在运行的程序的实例。
广义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

为什么要使用多进程?
更大的内存分配。
防止进程被杀死。
独立主进程完成任务。

多进程造成的问题
静态成员和单例模式完全失效。
线程同步机制完全失效。
SharedPreferences可靠性下降。
由于Application多次创建,所以我们不能直接将一些数据保存在Application中

进程间文本通信之序列化

Serializable方式介绍

序列化和反序列化序列化:
将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中生成的二进制串转换成数据结构或对象的过程。

序列化应用场景
内存中的对象状态保存到文件或数据库
网络上传送对象
进程间传递对象

序列化作用
以某种存储形式使自定义对象持久化
将对象从一个地方传递到另一个地方
使程序更具维护性

定义与介绍
标记接口
无方法和字段
仅用于标识可序列化化

Serializable代码实现:https://blog.csdn.net/u011568312/article/details/57611440

Parcelable方式介绍  https://blog.csdn.net/justin_1107/article/details/72903006

代码实现
序列化:        writeToParcel(Parcel dest,int flags);
反序列化:    createFromParcel(Parcel source);

Parcelable的使用: https://blog.csdn.net/shma1022/article/details/78730008

Serializable和Parcelable的区别



Android中的几种进程间通信方式

 

Bundle

定义与介绍

应用场景
数据的保存和恢复
给Fragment传递数据
不同线程间通信
开启另Activity的时候

Bundle的使用:https://blog.csdn.net/drunken_pirate/article/details/54906250

Messenger

 定义与介绍
允许实现基于消息的进程间通信的方式
内部通信依赖AIDL
底层是Binder进行通信的

Messenger使用:https://blog.csdn.net/amd123456789/article/details/68948938?utm_source=blogkpcl0

 AIDL

定义与介绍
Android Interface Definition Lauguage
文件以.aidl结尾
支持数据类型(基本数据类型、String、 CharSequenc, List,Map、 Parcelable AIDL)
底层是Binder进行通信的

AIDL的使用: https://blog.csdn.net/u011240877/article/details/72765136 

AIDL的使用(简单):https://blog.csdn.net/u011974987/article/details/51243539

代码实现
服务端:
Service处理客户端请求
创建以.aidl结尾的通信文件
onBinder中返回.aidl对象对应的IBinder
客户端:
绑定Service
拷贝服务端的.aidl包及文件
通过IBinder获得aidl对象
获得、操作服务端数据

 ContentProvider

定义与介绍
不同应该程序直接进行数据交换的标准API
以Uri的形式对外提供数据
通过ContentResolver根据Uri访问、操作指定数据

代码实现
继承ContentProvider
实现增、删、改、查方法
通过ContentResolver操作数据

 ContentResolver使用:https://blog.csdn.net/bzlj2912009596/article/details/80248272

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值