第二章 IPC机制

2.2 Android中的多进程模式

1.首先,在Android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process属性,除此之外没有其他办法。
属性值不同,即代表在不同的进程中。
2.可以通过adb shell ps | grep com.ryg.chapter_2来查看进程信息。(com.ryg.chapter_2是包名前缀)
3.进程名以“:”开头的进程属于当前应用的私有进程,其他应用组件不可以和它跑在同一个进程中,而进程名不以“:”开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一个进程中。如下:

    (私有进程)  (全局进程)

4.多进程会造成的几个问题:

  • 静态成员和单例模式完全失效
  • 线程同步机制完全失效
  • SharedPreferences的可靠性下降
  • Application会多次创建(运行在不同进程中的组件是属于两个不同的虚拟机和同一个Application的)
    多进程模式中,不同进程的组件的确会拥有独立的虚拟机、Application以及内存空间

2.3 跨进程通信常用的接口:Serializable接口、Parcelable接口以及Binder(这部分略)。

| Parcelable | Serializable
----|------|----
效率 | 效率很高 | 开销很大、序列化和反序列化过程需要大量I/O操作
复杂度 | 较为复杂 | 较为简单
适合场景 | Android推荐(内存序列化) | 适合将对象序列化到存储设备或者网络传输

2.4 Android中的IPC方式

  • 使用Bundle(Bundle实现了Parcelable接口),四大组件中的三个组件(Activity、Service、Receiver)都是支持在Intent中传递数据的
  • 使用文件共享。
    • 可以是文本文件,也可以是XML文件
    • 使用SharedPreferences(每个应用的SharedPreferences文件都可以在当前包所在的data目录下查看到,一般来说,它的目录在/data/data/package name/shared_prefs目录下(package name是当前包名)
  • 使用Messenger(以一个串行的方式处理客户端发来的消息,如果大量的消息同时发送到服务器,服务器仍然只能一个个处理,如果有大量的并发请求,那么用Messenger就不太合适了,messenger也不能跨进程调用服务端)
  • 使用AIDL来实现跨进程的方法调用。
  • 使用ContentProvider(用的很多,不过多介绍)
  • Socket通信,常用于网络数据交换。

建议练习一下Messenger、AIDL、Socket,书中P65到P120,虽然除了AIDL其他在平常的使用中并不常用

更多相关文章

  1. AIDL/IPC Android(安卓)AIDL/IPC 进程通信机制——超详细讲解及
  2. Android(安卓)进阶11:进程通信之 ContentProvider 内容提供者
  3. android全功能音乐播放器、基于MVP-Clean + Weex + RxJava2 + Re
  4. 2019-11-22 Notification(通知服务)的实例
  5. 通信组件之Intent的基本使用
  6. Android(安卓)AIDL实现两个APP间的跨进程通信实例
  7. Android开源介绍-UI组件
  8. Android四大组件是什么?讲讲你对它们的理解?
  9. Google 官方应用架构的最佳实践指南

随机推荐

  1. 负载均衡概念入门
  2. 微信小程序介绍、配置、视图层、逻辑层、
  3. 互动网站建设,如何操作,海量模板一站式建站
  4. <JVM下篇:性能监控与调优篇>04-JVM运行时
  5. 实例演绎php遍历数组与js遍历数组的区别
  6. <JVM下篇:性能监控与调优篇>05-分析GC日志
  7. <JVM中篇:字节码与类的加载篇>02-字节码指令
  8. PHP编程0804作业
  9. <JVM上篇:内存与垃圾回收篇>01-JVM与Java
  10. 0802 PHP编程作业