进程:一个进程 》 一个虚拟机 》 一个内存地址
为什么要用到多进程?
1.为应用申请更多的内存空间
2.不同应用间的通信
一:多进程模式
启动:
1. 四大组件(activity, server , broadcase , contentProvider)→ android:process 设置 进程
2. 通过JNI 再 native 层 去 fork 一个新的进程
配置:
1. " : " 私有进程,其他应用组件不可以和它跑在同一进程中
2." 包名.remote" 全局进程, 其他应用通过 ShareUID 可以和它跑在同一进程,签名 相同
问题:一个进程一个虚拟机一个内存地址 访问同一类的对象 会产生多个副本
1.静态成员和单例模式完全失效
2.线程同步机制完全失效
3.SharedPrefences的可靠性降低
4.Application 会多次创建
二:IPC基础概念
1.Serializable :java 提供的,使用简单,开销大,大量I/O操作
serialVersionUID ,避免反序列化过程的失败(成员变量类型或者类名的改变,这种结构 变化反序列化仍然失败)
注意:1.静态成员变量属于类,不属于对象,不参与序列化过程
2.transient 关键字标明的成员变量,不参与序列化过程
2.Parcelable:android 提供的,使用麻烦,效率高。(反序列化要传入上下文环境)
3.Binder:Android中的一个类,实现了IBinder 接口,也是一个虚拟的物理设备 (dev/binder)
1.Framework,Binder 是ServiceManager 连接各种Manager 和 ManagerService 的 桥梁
2.应用层来说,是客服端和服务端通信的媒介
工作机制:
三:Android 中的 IPC 方式
1.Bundle(intent)
2.文件共享(线程同步问题)
3.Messanger(hanlder)
4.AIDL
5.ContentProvider(数据信息)
6.Socket(copy 两次)