《Android开发艺术探索》摘录2
16lz
2021-01-26
第二章 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其他在平常的使用中并不常用
更多相关文章
- AIDL/IPC Android(安卓)AIDL/IPC 进程通信机制——超详细讲解及
- Android(安卓)进阶11:进程通信之 ContentProvider 内容提供者
- android全功能音乐播放器、基于MVP-Clean + Weex + RxJava2 + Re
- 2019-11-22 Notification(通知服务)的实例
- 通信组件之Intent的基本使用
- Android(安卓)AIDL实现两个APP间的跨进程通信实例
- Android开源介绍-UI组件
- Android四大组件是什么?讲讲你对它们的理解?
- Google 官方应用架构的最佳实践指南