简介
Ashmem即Android Shared Memory, 是Android提供的一种内存共享的机制。
使用
- Java层借助
MemoryFile
或者SharedMemory
。 - Native层借助
MemoryHeapBase
或者MemoryBase
。 - Native层直接调用libc的
ashmem_create_region
和mmap
系统调用。
MemoryFile
基于SharedMemory
。MemoryBase
基于MemoryHeapBase
。SharedMemory
、MemoryHeapBase
都是基于ashmem_create_region/mmap
。
MemoryFile
MemoryFile是对SharedMemory的包装,官方推荐直接使用SharedMemory。
Applications should generally prefer to use {@link SharedMemory} which offers more flexible access & control over the shared memory region than MemoryFile does.
SharedMemory
SharedMemory
只能通过调用SharedMemory.create
静态方法或者通过Parcel反序列化的方式进行创建。 SharedMemory
的创建进程通过SharedMemory.create
创建,使用进程通过Parcel反序列化创建。
因为SharedMemory
类实现了Parcelable
,所以可以通过binder跨进程传输。
MemoryBase和MemoryHeapBase
MemoryBase
是对MemoryHeapBase
的包装。MemoryHeapBase
对应一块共享内存,使用ashmem_create_region/mmap
创建,MemoryHeapB