问题标签 [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 投票
1 回答
324 浏览

android - Ashmem 保留政策

所以在 Android 上既没有 POSIX 共享内存也没有 SysV 共享内存,但是有ashmem. 我想用它从本地子系统的崩溃中收集一些事后信息(就像在这里)。问题 - 当持有它们的句柄的进程死亡时,我可以让一个 ashmem 区域持续存在吗?ashmem 记录在哪里?

0 投票
3 回答
5311 浏览

android - NDK 中的共享内存区域

我想要一个ashmem从本机代码映射和访问的共享内存块(一个区域)。我还希望这个块被多个应用程序使用。我也希望它在 SDK 7 级(Android 2.1)上工作

有两条路线。我可以在本机代码中创建一个 ashmem 区域;但问题是 - 我如何将整数文件描述符传递给另一个进程?您可以通过 a 编组FileDescriptor对象Parcel,但无法围绕原始 FD 构造对象。还有ParcelFileDescriptor支持构造和检索整数 FD,但相关方法仅在 SDK 级别 12 或更高级别中支持。

或者,我可以创建一个MemoryFile. 在 Parcels 中传递它有一种丑陋的方式。但是我如何从中检索文件描述符,以便本机代码有一些东西mmap()呢?

0 投票
1 回答
1466 浏览

android - android内容提供者对提供者崩溃的鲁棒性

在 android 平台上(在 ICS 上已确认),如果内容提供者在客户端处于查询中间(即有一个打开的游标)时死亡,则框架决定终止持有打开游标的客户端进程。

这是我尝试使用下载管理器查询时的 logcat 输出,该查询在执行查询后休眠。“睡眠”是为了重现问题。当提供者在正确/错误的时间死亡时,您可以想象它发生在常规用例中。然后杀掉 com.android.media(它承载了 downloadProvider)。

“杀死 com.example(pid 12234),因为提供者 com.android.providers.downloads.DownloadProvider 正在死亡进程 android.process.media”

我在 ActivityManagerService::removeDyingProviderLocked 中跟踪了此代码

这是一个政策决定还是提供者死亡后游标访问不安全?

看起来客户端光标正在为 CP 填充的 ashmem 位置保存一个 fd。这是客户端被杀死而不是在服务器(提供者)死亡时抛出像Binders这样的异常的原因吗?

0 投票
2 回答
3479 浏览

android - 基于 ASHMEM 的 SHM 替换

我正在开发从 *nix 到 Android 的库端口,该库使用共享内存或shm. Android 没有 System V shm。相反,它使用ashmem.

shm有人知道将调用映射到 shim 库ashmem吗?谷歌并不是很有帮助。

0 投票
2 回答
7674 浏览

android-ndk - NDK 中不包含 Cutils?

我需要使用 cutils 库和头文件在我的 NDK 项目中实现 ashmem,但我在系统中找不到与 cutils 相关的任何内容。它位于哪里或从哪里可以获得它?

0 投票
1 回答
1098 浏览

android - 在 Java 服务和本机应用程序之间共享缓冲区,访问开销最小

我正在尝试在 Android Java 服务和本机进程之间建立一个共享内存区域。本机进程没有 Java 组件,纯粹是 C++,并且直接通过命令行从 shell 调用。

我相信我可以使用 ashmem 和 binder 来实现这一点。首先调用 ashmem_create_region,对结果调用 mmap,然后使用 binder 将结果 fd 传递给另一个进程。另一个进程在 fd 上执行 mmap,从而获得对共享区域的访问权限。

我知道这适用于两个 Java 应用程序,也适用于 Java 应用程序或服务与本机模式进程。

我现在想知道 Java 服务如何有效地访问数据。我想使用这种机制将大约 300MB 大小的浮点缓冲区从本机应用程序复制到 Java 服务。现在,Java 服务需要访问这些数据,而无需像 JNI 那样产生开销。分配共享区域的最佳策略是什么,以便本机程序可以将浮点数快速复制到缓冲区中,并且 Java 服务可以以最小的开销访问这些值?

谢谢

0 投票
0 回答
135 浏览

java - 在本机进程和 java 服务之间使用 ashmem,没有高开销

我正在尝试在 Android Java 服务和本机进程之间建立一个共享内存区域。本机进程没有 Java 组件,纯粹是 C++,并且直接通过命令行从 shell 调用。应用程序需要将完整图像(目前大约 300 MB)发送到服务。图像是浮点数据。

我相信我可以使用 ashmem 和 binder 来实现这一点。首先调用 ashmem_create_region,对结果调用 mmap,然后使用 binder 将结果 fd 传递给另一个进程。另一个进程在 fd 上执行 mmap,从而获得对共享区域的访问权限。

我知道这适用于两个 Java 应用程序,也适用于 Java 应用程序或服务与本机模式进程。

我现在想知道 Java 服务如何有效地访问数据。我想使用这种机制将大约 300MB 大小的浮点缓冲区从本机应用程序复制到 Java 服务。现在,Java 服务需要访问这些数据而无需高昂的开销。有人告诉我,由于从 Java 服务访问数据的成本,JNI 开销阻止了使用这种技术。这个对吗?有没有另一种方法可以做到这一点而不会产生高昂的开销?

比如Java服务能不能把数据分配成一个ByteBuffer,然后让native服务通过指针来访问呢?

谢谢

0 投票
1 回答
1097 浏览

android - 关于在用java编写的android应用程序中使用异步共享内存(ASHMEM)

实际上在 dalvik 字节码中的 android 应用程序(不是本机应用程序)如何可以从 ASHMEM 中受益。他们的应用程序开发人员在android框架中是否有任何API?

我知道这是一个一般性的问题,但除非我已经尝试过并且没有得到明确的答案,否则我不会把它放在这里。

0 投票
0 回答
92 浏览

android - 为什么我的应用程序在供应商/应用程序上获得更多本机内存?

当我在 /vendor/app 中安装我的应用程序而不是使用包管理器安装到 /data/data. android 是否以不同的方式对待这些应用程序并为它在 vendor 中找到的进程预分配更多内存?

此外,与几乎扁平的 /data/data 相比,当它安装在供应商/应用程序上时,我处理数据库的进程之一中的本机堆急剧增加。

有人可以帮我解决这个问题吗?

0 投票
1 回答
2579 浏览

android - dalvik-LinearAlloc、dalvik-aux-structure、dalvik-bitmap-1、dalvik-bitmap-2、dalvik-card-table、dalvik-mark-stack和dalvik-zygote中的数据是什么?

我在 PID 上使用 showmap 命令,我无法理解报告中的这一部分:

我想知道 dalvik-LinearAlloc、dalvik-aux-structure、dalvik-bitmap-1、dalvik-bitmap-2、dalvik-card-table、dalvik-mark-stack 和 dalvik-zygote 中有哪些数据。

这些 ashmem 占用了数百万字节的内存,我想找到一种方法来缩小这些 ashmem 的大小。