问题标签 [ashmem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3433 浏览

android - 如何在进程之间将文件描述符传递给 Ashmem

我正在尝试将指向 ashmem 区域的文件描述符从服务(进程 A)传递到活动(进程 B)。在服务中,我将本机文件描述符放入 ParcelFileDescriptor 并将其放入包中,然后通过 Messenger 发送。但是,当我尝试在 Activity 中使用此文件描述符来 mmap() 时,我得到 errno == 9(EBADF,错误文件号)。

在 Service 的 JNI 中创建 ashmem 区域:

将 fd 从 Service 发送到 Activity:

在 Activity 中接收 fd:

在 Activity 的 JNI 中处理 fd :

这是我在 logcat 中得到的:

这里有什么问题?我什至不确定这是否是传递文件描述符的问题,我不知道我还能检查什么。

0 投票
1 回答
782 浏览

android - 如何释放 ashmem

分配和使用 ashmem 效果很好:

但问题是,使用后取消映射就足够了吗,还是我需要做更多才能再次释放内存?

0 投票
1 回答
12850 浏览

android - 写信给 ashmem / 为什么 android 会释放 ashmem?

我想在两个(ndk-)进程之间共享数据。为此,我使用 ashmem using this source
一个进程连续读取(read_mem),一个进程写入一次(write_mem)。

问题是读取过程没有获得写入者的值。

通过查看阅读器的地图,我发现 android 会立即删除共享内存文件ashmem_create_region


read_mem.c

write_mem.c


这是输出:
阅读

写作

再次阅读VALUE = 0x0(按回车键)

看读者的地图:

如您所见test_mem,已删除WHILE read_mem还活着。


其他信息

这两个文件都使用 androidndk-build命令
设备编译为可执行文件:LG Nexus 4 (AOSP Lollypop)
我检查/dev/ashmem了它是否存在。
ashmem 取自这里

0 投票
1 回答
704 浏览

java - Android:在本机代码 (C) 和应用程序 (java) 之间共享数据

我有一个在 Android 5.0 上运行的本机应用程序,实际上是一种音频效果,它在摄​​像机录制用例(例如)上启动。我有一个应用程序需要从中检索一些数据,3 个整数 exaclty,不断变化。

如何从我的本机进程中与我的应用程序共享这些数据?

有什么选择?

我查看了 ashmem 但找不到适合我的案例的示例,我尝试将数据写入文件并使用 jni 读取它们,但是当我启动此读取函数时,我看不到任何本机函数的痕迹(仅jni 本身)并获得恒定的随机数......(但没有崩溃)

谢谢,皮埃尔

0 投票
0 回答
211 浏览

android - Ashmem slower than files?

I'm looking at using ashmem to help a couple processes coordinate. Before I start spending the effort to use it, I thought I'd see how much of a speedup it offers over a plain 'ol file.

Here are some typical numbers

The numbers don't get much better even when I include the time to close the file. How could memory writes be slower than a file on disk? What am I doing wrong?

0 投票
0 回答
230 浏览

android - 有没有使用Android binders的c接口

基本上我需要使用共享内存。从这个例子中,我了解到我需要使用活页夹在 2 个进程之间传递 fd 才能使用共享内存。

但是我的应用程序是用 C 语言编写的。那么,是否有用于使用 android binders 的 C 接口?

0 投票
0 回答
473 浏览

android - 如何在本机代码中使用 ashmem(无活页夹)

是否可以在ashmem不通过活页夹传递 fd 的情况下使用?

从我的 android 本机代码中,我分叉了两个不同的进程。我想在这两个进程执行时使用它们之间的共享内存。我怎样才能实现它?

0 投票
1 回答
661 浏览

android - 如何使用 MemoryFile 在 android 中执行 IPC?

MemoryFile 被记录为围绕 Android 的 Ashmem 的包装器:https ://developer.android.com/reference/android/os/MemoryFile.html

当然,Ashmem 用于执行 IPC。然而,在 MemoryFile 的当前 api 中,我看不到任何促进 IPC 的东西。

假设在进程中 AI 想要将位图共享给其他进程。我想用 MemoryFile 来实现这一点。在过程 A 中:

在此之后,应该已经创建了 Ashmem 对象并将位图数据写入其中。现在我想与进程 B 共享它。我期待的是 MemoryFile 中有一个方法返回文件描述符。我可以通过 Binder 将此文件描述符传递给进程 B。然后进程 B 可以用这个文件描述符创建一个 MemoryFile 并读取数据。但是 MemoryFile 中没有 api 来促进这一点。那我怎么能用 MemoryFile 做 IPC 呢?

0 投票
0 回答
2934 浏览

android - 进程图中 /dev/ashmem(已删除)记录的含义

我想知道下一条记录的含义是什么/proc/<pid>/maps

尤其是什么(deleted)意思?这个内存范围是由进程内的某个东西持有并且应该稍后释放还是这些记录只是标记并且没有关联的物理内存?即可以简单地调用mmap()返回与这些范围相交的映射?

PS 范围名称可能略有不同,但它们始终包含/dev/ashmem ... (deleted).

0 投票
1 回答
209 浏览

android - Inode 和已删除的文件条目

这是参考这里的答案,因为我在评论中没有收到对我的问题的回应。

它的真正含义是在 /dev/ashmem/ 目录中创建了一个文件条目,然后将其删除,但相应的 i-node 仍然存在,因为它至少有一个打开的文件描述符

这在 *nix 术语中是什么意思?AFAIK,Android 是 ext4 类型的。我知道在某些文件系统中,inode 结构会在文件被删除后保留数据,而在某些文件系统中,结构的内容会被重置。但是上面的说法是什么意思?如果文件条目被删除,如何至少有一个打开的文件描述符仍然打开?这里没有硬链接或软链接。