- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在创建一个基于 Open GL ES 3.0
的 Android 应用程序,它必须满足各种设备的需求。
由于我的应用程序中的某些要求,我必须在我的应用程序运行时在 RAM 上保留大量图像数据。由于 Android 手机对每个应用程序的 CPU 内存使用量或 堆内存大小
有限制,因此我决定在我的应用程序运行时将所需的图像数据作为纹理保留在 GPU 内存上。
我的纹理大小是 1024x1024
。保存纹理并在需要时再次显示它们对于它的实现部分来说一切正常。
但是,很快我发现 GPU 内存也有接近的限制(看起来)。我只能在 Sony XPeria Z5 上保存 1024x1024x50
近似数量的纹理。另一个 Sony XPeria 系列的 1024x1024x70
纹理。 1024x1024x90
在 Huawei P8 等等。
此外,我发现iOS
设备上的纹理
/GPU 内存
也有限制。我无法在 iPhone 6+
上保存更多 1024x1024x90
纹理!!
这里的数字不准确,但非常接近。我提出这个问题的目的是了解Android 设备上的应用程序允许使用多少 GPU 内存。
Android 应用是否允许 GPU 内存以某种方式与 CPU 内存相关 link here表示 ?
Android 应用程序可以通过 list 中声明的属性请求large heap
。同样,有什么方法可以为我的应用请求更多 GPU 内存?
纹理真的存储在 GPU 内存中还是其中的一部分也存储在 CPU 内存中?
任何与 iOS 设备和 Android 设备上的 GPU 内存限制相关的信息都会有所帮助。
最佳答案
我认为你关心的所有设备都有统一的内存,这意味着你不必担心 GPU 和 CPU 内存之间的区别。从您的角度来看,最好将其视为同一个 RAM 池。
Android apps can request for large heap by a property declared in Manifest. Likewise, Is there some way I can request for more GPU memory for my app ?
大堆是指 Java 分配。如果您正在编写 native 代码(许多面向 iOS 和 Android 的应用程序的大部分代码都是用 C++ 编写的),那么它可能不会有太大区别。
可以看到不同的iOS设备有多少内存here .
安卓的话可以看here查看兼容性定义。例如,支持 Marshmallow 的非 watch 设备至少有 512MB。
您可以算出您的纹理需要多少内存,假设 32 位 8888 格式且没有 mipmap,每个纹理为 1024*1024*4bytes=4MB(如果这些假设有误,请更新问题!)。带有其中 50 个的 Sony XPeria Z5 的容量大约为 200MB。华为 P8 和 iPhone6+ 快死在 360MB。
您不应该期望能够使用智能手机上接近所有 RAM 的任何地方。有一个操作系统和其他应用程序需要运行,并且没有像您在桌面操作系统上看到的那样基于存储的虚拟内存。根据经验,在操作系统关闭您的应用程序之前,您可能会使用大约 30%-50% 的系统 RAM。 iOS 肯定会,我相信 Android 也会在您的内存使用率过高时向您的应用发送警告。
粗略计算在 iPhone6+(1GB RAM,您可以使用 360MB)上大致正确,但 Sony XPeria Z5 和华为 P8 都有巨大的 3GB RAM。老实说,我不知道为什么你能用这么少的东西。
编辑:此外,在调试器中运行会增加显着的内存开销,但我认为这无法解释那些 Android 设备上丢失的 GB。
关于android - 在 Android 和 iOS 设备上保存纹理的 GPU 内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053983/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!