这篇文章主要从以下几点着手:
什么是IPCAndroID中进程与线程之间的关系开启多进程的方法多进程通信存在的问题AndroID中IPC的方式有哪些什么是IPCIPC是指进程间通信或者跨进程通信,即两个进程之间进行数据交换的过程。
AndroID中进程和线程的关系? 区别?线程是cpu调度的最小单元,同时线程是一种有限的系统资源。而进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程至少包含一个线程也可以包含多个线程,因此进程和线程是包含与被包含的关系。
如何开启多进程要想开启多进程只有一种方法,那就是给四大组件(Activity、Service、Receiver、ContentProvIDer)在AndroIDMenifest中指定androID:process属性。
androID:process属性命名有两种:
androID:process=":remote"androID:process=“com.test.process.remote”“:”的含义是指要在当前的进程名前面附加上当前的包名,这是一种简写的方法,如果包名是com.test.process,那它完整的进程名为com.test.process:remote;另外一点需要注意的是:进程名以“:”开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,而进程名不以“:”开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一个进程中。
那应用是否可以开启N个进程呢?
当然在内存允许的条件下可以开启N个进程
多进程通信可能会出现什么问题为何需要IPC?
所有运行在不同进程的四大组件(Activity、Service、Receiver、ContentProvIDer)共享数据都会失败,这是由于AndroID为每个应用分配了独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这会导致在不同的虚拟机中访问同一个类的对象会产生多份副本。
多进程通信会造成如下几方面的问题
静态成员和单例模式完全失效:独立的虚拟机造成线程同步机制完全实效:独立的虚拟机造成SharedPreferences的可靠性下降:这是因为Sp不支持两个进程并发进行读写,有一定几率导致数据丢失Application会多次创建:AndroID系统在创建新的进程会分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程,自然也会创建新的ApplicationSerialzable和Parcelable的区别首先来看下Bundle传递对象为什么需要序列化?
那是因为内存中的对象是短暂的,无法长期驻存在内存中,为了想把对象的状态保存下来,就需要将对象写到磁盘和其他介质中,而这个过程就叫做序列化 。反序列化是序列化的反向 *** 作。
序列化:将内存中的对象存储在磁盘或者其他介质中
反序列化: 将磁盘或者其他介质中的对象写到内存中
AndroID中的IPC方式有很多种,主要是Binder和Socket,其中在AndroID开发中,Binder主要用在Service中,包括AIDL和Messenger,其中普通Service中的Binder不涉及进程间通信
总结以上是内存溢出为你收集整理的IPC全部内容,希望文章能够帮你解决IPC所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)