如图:android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。当两个应用由相同的shareUID与签名 才可以跑在同一个进程中。当跑在同一个进程中时,可以共享data目录、组件信息、内存数据等。
android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致不同的虚拟机中访问同一个类的对象会产生多份副本。
所有运行在不同进程中的四大组件,只要他们之间需要通过内存来共享数据,都会共享失败。一般会造成:
1)静态成员和单例模式完全失效
2)线程同步机制完全失效(不同进程的锁不是同一个对象)
3)SharedPreferences的可靠性下降(sp不支持两个进程同时执行写操作)
4)Application会多次创建(当一个组件跑在一个新的进程的时候,由于系统要在创建新的进程同时分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程。因此,相当于系统又把这个应用重新启动的一遍,既然重启了,自然会创建新的application)
网友评论