《Android开发艺术探索》摘录2

第二章 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其他在平常的使用中并不常用

你可能感兴趣的:(《Android开发艺术探索》摘录2)