IPC机制---02 Android中的多进程模式

  • 通过给四大组件在mainest.xml中增加android:process属性,可以轻松的开启多进程模式,但是这样也是暗藏杀机的。
  1. 开启多进程模式
    • 正常情况下,android中多进程是指一个应用存在多个进程的情况,因此暂时忽略两个应用之间的通讯问题。
    • 正常情况下,在一个应用中开启多进程只有上述说到的一个方法,也就是说我们无法给一个线程或实体类开启一个单独的进程。此外,还有一种非常规方法,通过JNI在native层fork一个进程。
          代码示例如下:
               
          如上,在清单文件中分别给第二 第三个开启了两个进程,在启动应用后,分别点击进入第二 第三个页面时,会发现开启了如下三个进程(包名为默认进程),分别为
               
    • 其中第二个和第三个进程名开启规则不一样,其进程名也是有区别的,主要有这么几点区别:
      • “:”表示在当前的进程名前面附加上当前的包名,这是一种简写。
      • 第三种为完整的命名方式,不会附加包名信息
      • “:”表示为当前应用的私有进程,其他应用的组件不可以和他跑在同一进程中。而第三种,则属于全局进程,其他应用可以通过shareUid的形式和他跑在同一个进程中
    • android系统会为每一个应用分配一个唯一的uid,具有相同uid的应用才可以共享数据。两个应用通过shareuid跑在同一个进程中也是有条件的,第一uid相同,第二签名相同。这样才可以共享data目录 组件信息 共享内存。
     2.多进程模式的运行机制
    • 使用多进程会造成如下问题
      • 静态成员和单例模式失效
      • 线程同步机制失效
      • SP的可靠性下降
        • sp不支持多个进程同时进行数据的读写,否则会造成一定几率数据丢失。sp本质上通过读写xml实现的,如果并发的话,可能是有问题的。
      • Application会被创建多次
        • 在组件跑在新的进程中的时候,系统在创建进程的同时会分配新的虚拟机和内存地址,相当于启动应用的过程,所以系统会创建新的application
        • 运行在同一进程的组件属于同一个application和虚拟机,运行在不同进行的组件是属于不同的虚拟机和application的。
    • 出现原因如下:
      • Second ThirdActivity都运行在独立的进程中,因为android为每个应用分配一个独立的虚拟机,也就是说为每个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的内存地址,这样导致在访问同一个类的对象时,会产生多个副本,他们的修改只对当前进程有效,而对其他进程不会造成任何影响。
      • 正常情况下,运行在不同进程中的四大组件,只要他们通过内存共享数据,都会共享失败,而四大组件不可能不通过中间层来共享数据,因此,单独的指定android:process是不可以的,只有在不共享数据的情况下是可以的。
     3.跨进程通信的方式
    •  通过Intent传递数据
    •  通过共享文件和SP
    •  基于Binder的Messager和AIDL
    •  Socket等
          
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值