Android知识点
1. 进程间通信方式
匿名共享内存
- 速度快
- 需同步处理:多进程(线程)读写操作,需暂停所有读,仅保留一个写完,所有写完,再读。
socket(管道通信)
- 速度慢:须经过两次拷贝,导致通信慢。
- 可传递大数据。
- 可用来做C/S模式(一个server端可同时与多个client端)通信。
signal(信号机制)
- 限制:一次通信只能传递一个int整数。
信号量
Binder通信
- 支持C/S模式。
- 速度仅次于匿名共享内存,仅拷贝一次数据。
- 进程启动时需创建一定大小的共享内存。
- 至少需启动一个binder线程为通信做准备(通信量大时需更多binder线程)。
- 使用共享内存机制,也需解决同步问题。
- 应用于:数据量大,通信频繁场景。
2. 数据结构
数组
- 按序排列,查找速度快(二分查找)。
- 增删效率低。
HashMap
- 查询快,增删查效率高。
- 扩容复杂。
- 结合数组和链表两种结构,当存在大量的key值的hash值一样时,查找效率会降低。
- 数据量大时会存在浪费内存的场景。
- 大数据量时不建议使用:内存浪费 + 查找效率低下。
3. Android属性服务
- 采用域名格式设计key,即可做到权限控制,又可根据前缀区分不同类别属性(control,sys)。
- 利用链表 + 二叉树存储key value属性,节省内存,加快查找效率,增删也利用链表的优势。
- 分组:大块共享内存按key值关联性划分为小共享内存空间,无关性的放在default共享内存中。
- init进程启动时启动属性服务系统,提前把磁盘中存储属性读取至内存中。
- init处理:control、sys,只读:ro,
查找过程
- key -> 找对应ContextNode -> 找对应prop_area -> 找prop_bt -> 找对应key的prop_info -> value