android IPC笔记

来源:互联网 发布:数据挖掘 招聘 长沙 编辑:程序博客网 时间:2024/06/15 22:30

IPC 全程是inter-process-communication 即,进程间通信或者跨进程通信

线程,是cpu最小调度单位,只一种系统资源
进程,一般值一个执行单元
进程可以包含多个线程
一个系统可以只有一个进程,比如安卓的主进程

每个进程都可以申请一块自己的内存空间
一个软件可以通过多进程,来申请多块内存空间,提高软件的总内存空间

android四大组件,通过指定process可以开启新的进程
android常规使用多进程只有一种方法,给四大组件在androidmenifest指定android的process属性,
但其实还有另一种非常规的方法,用jni,在native层fork一个新的进程

多进程会造成的一些后果
1),静态成员和单例模式完全失效
2),线程同步机制完全失效
3),sharedPreferences的可靠性下降
4),Application会多次创建

原因是,每个进程都会配备一个自己独立的虚拟机和内存,因为内存是各自独立的,所以即便是
访问同一个类对象,实际上是各自内存中创建一个类,所以对这个类的任何操作都是操作
各自内存的这个类,所以各个进程间的类静态成员等都不能统一,很独立
还有因为是各自分配虚拟机,所以每次启动新的进程类,都会分配一次虚拟机,而
分配虚拟机,实际相当于重启application,
至于sharepreference,因为sharepreference的本质就是读写本地的一个xml文件,
而这种文件不支持并发写,所以不能让两个进程同事操作

ipc基础接口:Sericalizable接口,Parceable接口,还有Binder
Sericalizable和Parceable可以实现对象的序列化,用intent传播binder对象时候就
需要用到这两个接口

Serializable是java提供的一个序列化接口,他是一个空接口,为对象提供标准的序列化
和反序列化,要实现这个,只需要在类声明中只一个类似下面的标志即可自动实现
private staticfinallongserialVersionUID = 234463634564564

parceable是安卓提供的新的序列化接口

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象

将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重

新创建该对象。

android开发中,binder主要用于service中,包括aldl和messenger,其中普通service中binder不涉及

进程间通信,所以较为简单,所以service实际上是跟主线程运行在同一个进程

Messenger的底层实际是ALDL

创建aldl步骤 假设是两个app之间的,第一,现在第一个app中创建一个aldl文件,然后在文件中定义一

个方法,然后第二步骤,创建一个service,重写onBind方法,return一个继承上面那个aldl文件stub的

内部类,在这个类里面实现aldl中定义的那个方法,第三步,将整个aldl文件拷贝到第二个项目,连包

名一起拷过去,第四个步骤,在第二个app中调用上面第一个app的service

进程间通信有几种方式:
1)共享文件读取
2)messager 底层用aldl实现
3)contentprovider 底层也用aldl实现
4)aldl
5)Bundle ,intent
6) 使用socket

原创粉丝点击