android - 为什么某些 Android 设备可能会使用更多的图形内存来运行相同的应用程序?

标签 android memory graphics opengl-es

我的 GLES2.0 应用在运行 Android 5.1.1 的 YUREKA YU5510 上内存不足。

分析表明,当应用程序通过 512mb 进入第一场比赛时发生故障。

但是,在 Galaxy Note 5 上对完全相同的构建进行分析表明,该应用在播放的同一时间点仅使用 275mb。

将应用程序启动到 YUREKA 上的标题屏幕(并让 GC 稳定下来)显示总共使用了 318.89mb。在 Note 5 上它显示 178.4mb。

大多数内存区域(Java、Native、Stack、Code 和其他)在两种设备上都非常相似。然而,在 YUREKA 上,仅在标题屏幕上使用的图形内存就高出 100mb - 当我离开标题屏幕并进入游戏时,这种差异会增加,最终占 237mb 差异的全部。

无论在何种设备上运行,该应用程序都会加载完全相同的艺术品和纹理。 Note 5 具有比 YUREKA 更高的原始分辨率,因此它应该为屏幕缓冲区消耗更多内存。我们不使用打包纹理 - 一切都是简单的 RGBA8,所以我不希望它必须创建多个内部缓冲区。

抱歉,我无法发布重现;这将是整个应用程序。有没有其他人遇到过任何与 Android 上的 RGBA8 纹理相关的问题?

编辑:我终于在周末获得了 YUREKA 的 root 权限(这样我就可以安装分析工具)。当我在 root 后运行完全相同的应用程序构建时,Android Studio 报告的内存使用量降低了约 150mb。所以看起来很像是安装在库存设备上的一些英国媒体报道软件(恶意软件?)负责。

最佳答案

每当出现此类问题时,请按照以下程序查找根本原因 首先检查 SFDump(检查分辨率差异) 然后检查 adb shell dumpsys meminfo PID(你已经检查过了) 然后您可以验证分解,例如哪个组件为应用程序 pss 做出贡献 adb shell cat/proc/PID/smaps(这将给出关于罪魁祸首的很多想法) 在此之后,它取决于哪个组件正在消耗相应的可以处理(对于 native 或 Java 堆)

关于android - 为什么某些 Android 设备可能会使用更多的图形内存来运行相同的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57906496/

相关文章:

c++ - C++ 中的集合和 xmemory

跨顶点的 OpenGL 颜色插值

android - 下方有内容的滑动抽屉

java - ECDSA KeyPairGenerator 不可用(但在 JUnit 中有效)

android - 如果我的应用程序处于 Activity 状态,如何屏蔽主页键? (屏保、锁屏)

c - Opengl 形状未在回调函数中绘制

graphics - 如何更改当前绘图窗口大小(在 R 中)

java - 安卓 ClassNotFoundException : Didn't find class on path dexpath unity plugin

c++ - 跨共享/静态库集成C++自定义内存分配器

python - 为什么将 pickle 文件加载到内存中会占用更多空间?