IPC

作者: Dapengyou | 来源:发表于2019-08-06 11:31 被阅读0次

    这篇文章主要从以下几点着手:

    • 什么是IPC
    • Android中进程与线程之间的关系
    • 开启多进程的方法
    • 多进程通信存在的问题
    • Android中IPC的方式有哪些

    什么是IPC

    IPC是指进程间通信或者跨进程通信,即两个进程之间进行数据交换的过程。

    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系统在创建新的进程会分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程,自然也会创建新的Application

    Serialzable和Parcelable的区别

    首先来看下Bundle传递对象为什么需要序列化?

    那是因为内存中的对象是短暂的,无法长期驻存在内存中,为了想把对象的状态保存下来,就需要将对象写到磁盘和其他介质中,而这个过程就叫做序列化 。反序列化是序列化的反向操作。

    序列化:将内存中的对象存储在磁盘或者其他介质中
    反序列化: 将磁盘或者其他介质中的对象写到内存中

    Serialzable和Parcelable的区别

    Android中IPC方式、各种方式优缺点

    Android中的IPC方式有很多种,主要是Binder和Socket,其中在Android开发中,Binder主要用在Service中,包括AIDL和Messenger,其中普通Service中的Binder不涉及进程间通信

    Android中IPC方式

    相关文章

      网友评论

          本文标题:IPC

          本文链接:https://www.haomeiwen.com/subject/wwhbdctx.html