1. 怎么跨进程传递大图片
考察点
- 了解各种跨进程传输数据的方式及各自优缺点
- 了解TransactionTooLargeException的触发原因和底层机制
- 了解Bitmap传输底层原理
跨进程传大图有哪些方案
- 给图片保存到固定的地方,传key值(路径)给对方
- 问题:性能差,把图片写到文件需要耗时,对方读取文件也需要耗时
- 通过IPC的方式转发图片数据
- 不经过文件系统,但是需要多次拷贝
IPC方式传图
- Binder:性能好,使用方便,但是大小有限制
- Socket、管道:两次拷贝,也有大小限制
- 共享内存:性能不错
- 主要注意点
- 1.性能,减少拷贝次数
- 2.内存泄漏,资源及时关闭
TransactionTooLargeException
- 发出去的或者返回的数据量太大
- Binder缓存用于该进程所有正在进行中的Binder事务
- 进程弃用binder机制会映射一块内存,大小是1M
- 跨进程通信申请的缓冲区大小是不能超过1M的
- 所有binder事务共享这1M内存空间,应该尽量避免同时跑多个事务,尤其是数据量很大的事务
- 大数据量打碎分批发,或按需发(官方建议)
总结 跨进程传递大图片的方式
- 图片写到文件,路径传到另一个进程,再读出来
- intent传图,但是容易抛异常,原因是什么
- binder调用传图,底层ashmem机制
2. ThreadLocal原理
关于更多面试题资料,可以前往 GitHub 自行查阅。
考察点
- ThreadLocal的适用于什么场景?
- ThreadLocal的使用方式是怎样的?
- ThreadLocal的实现原理是怎样的?
ThreadLocal在FrameWork中的使用
-
Looper
-
Choreorgapher
原理