Android IPC机制简介

 IPC 是Inter-Process-Communication 的缩写,含义为进程间通讯或者跨进程通信,是指两个进程间进行数据交换的过程。

理解两个概念  线程 是CPU调度的最小单元,同时线程也是一种有限的系统资源 。

                     进程一般是指一个执行单元,在pc端或者移动端对应表示一个程序或者一个应用。

进程和线程的关系   一个进程可以包含多个线程。一个进程可以只有一个线程,即主线程。如果在主线程进行耗时操作 会造成界面                           无响应,在pc系统和移动系统中都存在,在android出现这种情况 名字叫做ANR(Application Not Responding)                          ,即应用无响应 android是主线程阻塞5s就会出现这种情况。  解决办法就是用子线程去进行耗时操作。

任何 一种系统都需要用到IPC机制

        Android 是基于Linux 内核的移动操作系统,但是并不能完全继承Linux的进程通信方式,android 有特色的进程通信方式是Binder,通过BInder可以轻松实现跨进程通信,同事android 还支持Socket进行跨进程通信。

为啥需要跨进程通讯?

      1,由于应用的某些特殊要求,一些模块必须运行在单独的进程中
      2.为了加大一个应用的可使用内存空间,默认一个进程可以得到系统固定的内存 一般默认为16MB
      3.一个应用为另一个应用提供数据。  常用ContentProvider 也是一种跨进程方式。


多进程模式

     在AndroidMenifest中为四大组件   Android:precess属性就可以开启一个进程。(这些组件要被调用启动之后才行)
     通过adb shell "ps | grep 包名" 可以查看一个包名下的进程信息。
      :会在前面加上包名做为进程的名字  标识当前应用的私有进程
     别的标识命名方式进程属于全局进程 可以通过ShareUID的方式 和他跑在同一个进程中。  需要相同的ShareUID和签名才行
      
      android为每一个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,不同的虚拟机访问同一个类的对象会产生多个副本。就是两个互不干扰的两个类。
      多进程产生的问题

     1. 静态成员和单例模式失效     静态成员和单例模式都是用的内存  不同进程 用的内存不一样所以失效

     2.线程同步机制完全失效    不是一块内存了,对象属于的内存不一样,锁对象和锁全局类都无法保证同步,锁的对象不是同一个对象
     3.SharePreference 可靠性下降     不同进程操作可能会出现同时操作问题,不支持并发读写。
     4.Application 会重复创建,一个组件跑在一个新的进程中,系统要创建新的进程同时分配新的虚拟机,这就相当于启动一个应用过程,会创建新的application 。

不同的进程会有独立的虚拟机,application 和内存空间, 同一个应用的多进程,就相当于两个不同的应用用了相同的ShareUId模式。
  

猜你喜欢

转载自blog.csdn.net/rfgreeee/article/details/79145271