【Android开发艺术探索】IPC机制(一)

什么样的情况下能用得到IPC?

  • IPC是Inter-Process Communication的缩写。含义为进程间通信或者跨进程通信。
  • 在Windows中通过剪贴板、管道、邮槽等来进行跨进程通信,Linux上通过命名管道、共享内容、信号量等来进行进程间通信。对于Android来讲,有自己独有的跨进程通信的方式。比如Binder、Socket、Bundle、文件共享、Messenger、AIDL等等。Android中,一个应用程序默认就是一个进程。Android为每一个应用分配一个独立的虚拟机。进程彼此之间不可见,数据无法共享。下面讨论的是同一个应用中多个进程的情况。
  • 开启多进程模式的方法
    • 用C语言在fork出一个新的进程
    • 四大组件在清单文件中设置android:process属性。如果不设置就是在默认进程中,名字是com.a.b(假如说包名是com.a.b)。如果设置了android:process=”:remote”属性,就是com.a.b:remote这个进程中,如果设置了android:process=”com.a.b.remote”属性,就是在com.a.b.remote这个进程中,每一个进程都有自己的Pid(一个数字)。
    • com.a.b.remote和com.a.b:remote的区别是,前者是一个全局的进程,其他应用可以通过ShareUID方式和它运行在一个进程里面,后者是一个私有进程,其他应用的组件不能运行在这个进程里面。“:”是一种简写,代表当前包名。两个应用通过SharedUID方式运行在一个地方是有条件限制的。Android系统会为每一个应用分配一个唯一的UID,只有两个应用有相同的UID并且签名相同才可以(这还是两个应用吗,表示不理解?),这会他们就能访问对方内存数据。
    • 由于是两个进程,在两个内存区域里面,无法通过内存区域进行数据共享。
      • 单例模式和静态成员失效
      • 线程同步机制失效(锁对象和锁全局类都不行,不是同一片内存)
      • sharedpreference无法保证可靠性
      • Application会多次创建 (一个新的组件与想在一个新的进程中,相当于启动了一个新的应用【把当前应用的application重新走一次】)。
为了解决上述问题,于是出现以IPC跨进程通信技术。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值