android - 如何在移动设备上获取可靠的内存信息?

标签 android ios memory-management

我目前正在开发一款在 iOS 和 Android 上运行的应用程序。该应用程序的核心是用 C++ 编写的,并随着时间的推移分配越来越多的内存。问题是我希望同时能够使用尽可能多的内存并确保应用程序的稳定性。

当然,要做到这一点,我需要知道我还能使用多少内存。这样,如果一段时间后我发现我需要的资源超出了可用资源,我就可以停止分配,而不是被操作系统杀死或崩溃。

问题是,在阅读并尝试了不同的解决方案之后,我的感觉是您动态获取的信息不够可靠。例如,在 iOS 上:

[NSProcessInfo processInfo].physicalMemory

这是我读过的典型例子/答案之一,似乎并不可靠。似乎您无法动态获取足够的信息来确保您仍然有足够的内存,因为如果操作系统使用过多内存并之前发送警告,操作系统会在某个时候终止您的应用程序。但它也可以杀死中间的其他应用程序,因此当我收到第一个应用程序时停止似乎不是最佳解决方案。

看了很多帖子,我对这个话题有点困惑。有没有办法动态可靠地知道我的应用程序在 iOS/Android 上还剩多少内存?或者这些操作系统的内存管理太不可预测了?

感谢您的帮助!

最佳答案

根据设计,操作系统禁止您用完设备上的所有物理内存;更重要的是,操作系统和在其上运行的其他应用程序的要求意味着您的应用程序可以轻松使用的内存量会随着时间的推移而变化。

因此询问您还剩下多少内存是不明智的。您应该将您的应用设计为使用尽可能少的内存,然后进行优化,直到使用的内存少于该内存。

  • 积极主动地将内容缓存到磁盘上。
  • 听取操作系统提供的关于您的内存力不足的通知。
  • 以这样一种方式设计您的应用,以便您可以从新启动恢复其最后的界面状态:应用启动和任务切换以相同的方式呈现给用户,他们不会也不应该知道其中的区别.

如果您确实使用了越来越多的内存,操作系统将尝试终止其他应用程序以为您的应用程序腾出空间。这意味着,再见 Facebook,再见 Twitter,再见 Mail,再见 Contacts。您的用户注意到,他们选择不那么频繁地启动您的应用,或者因此对您的应用评价不佳。

关于android - 如何在移动设备上获取可靠的内存信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502065/

相关文章:

android - 使用 android 动画列表

android - 父级 wraps_content 和子级 fills_parent 是什么意思?

iphone - 旋转 UIAlertView

iPhone/iPod Touch : application executable contains unsupported architecture(s): armv7s (-19031)

c++ - 删除数组时delete和delete[]是一样的吗?

c++ - 堆损坏或堆栈损坏

java - 如何用两个TextView制作Gridview?

子类中空重写方法的 Java 替代方案

ios - 带有图像的 UICollectionView 单元格,通过在 Swift 中单击更改背景

tensorflow - TensorFlow 如何在 Windows 10 上的 GPU 上同时使用共享和专用 GPU 内存?