Pich Blog

关注移动开发,大数据,云计算,软件架构!

3.在Android开启多进程所带来的问题

概述

上一节我们看到在Android中给四大组件指定不同的进程是多么的容易,但是真的这么简单吗。

开启多进程模式后的问题

可以看见开启多进程模式还是很简单的,但是这会带来更多的问题。

静态成员和单例模式完全失效

首先我们新建一个类叫UserManager,有一个public的静态成员变量:

然后我们在MainActivity中改为2,并打印这个值,然后在启动SecondActivity中,并在onCreate打印改值,正常两边都是2,但是实际情况下发现SecondActivity打印的还是1。

原因:是因为SecondActivity运行在一个单独的进程中,android为每个应用分配一个虚拟机,更精确一点是为每个进程分配一个,不同的虚拟机在内存上有着不同的地址空间,所以这就导致了访问一个类会产生多个副本。

所以所有运行在不同进程中的四大组件,只要他们通过内存共享数据,都会失败。所以就需要通过其他方法共享数据。

线程同步机制完全失效

问题的原因和第一个问题类似,既然都不是同一块内存了,那么不管是锁对象锁全局类都无法保证线程同步。因为不同的线程锁的不是同一块内存。

SharePreferences可靠性下降

因为他不支持两个进程同时去执行写操作,否则有可能导致数据丢失。因为底层是通过读写xml文件,显然并发写肯定有问题。

Application会多次创建

因为每个组件需要初始化不同的虚拟机,所以这就是多个启动应用的过程,所以肯定会创建多个Application对象。

我们在Application的onCreate中打印进程名:

打印如下:

肯定看到多进程带来了很多问题,但是我们还是得用,所以就只能通过其他方法来共享数据。实现跨进程通信的方式有很多可以通过Intent,共享文件,SharedPreferences,基于Binder的Messageer和AIDL,Socket。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注