Android 共享内存(ashmem)
前言
项目中接入讯飞语音合成,在sdk中看到 MemoryFile,了解下用法发现,看到的只是冰山一角。
官方介绍:
SharedMemory enables the creation, mapping, and protection control
over anonymous shared memory.
SharedMemory 启用对匿名共享内存的创建,映射和保护控制。
简单用法:将data数组内容写入到sd卡上。
MemoryFile memFile=null
private void writeToFile(byte[] data) throws IOException {
if (data == null || data.length == 0)
return;
try {
if(memFile == null)
{
Log.e("MscSpeechLog_","ffffffffff");
String mFilepath = Environment.getExternalStorageDirectory()+"/1.pcm";
memFile = new MemoryFile(mFilepath,1920000);
memFile.allowPurging(false);
}
memFile.writeBytes(data, 0, (int)mTotalSize, data.length);
mTotalSize += data.length;
} finally {
}
}
看到上面内容一脸蒙,内存共享解决的是跨进程高效数据交换问题,通过MemoryFile进行byte[]转文件操作,就这这?
至少应该有跨进程吧。
翻看sdk没看到Aidl,大概率so文件中。
用工具看下so中是否有相关方法如图:找到两个speech 语音合成相关函数。
看了一通blog,没有明白 MemoryFile的使用
引用:
https://developer.android.com/reference/android/os/SharedMemory SharedMemory
https://www.jianshu.com/p/d9bc9c668ba6 Android匿名共享内存(Ashmem)原理