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

时间:2015-05-28 09:09:41

标签: android ios memory-management

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

当然,要做到这一点,我需要知道我仍然可以使用多少内存。这样,如果我看到一段时间后我需要更多的东西,那么我可以停止分配而不是被操作系统杀死或崩溃。

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

[NSProcessInfo processInfo].physicalMemory

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

阅读了很多帖子后,我对这个话题感到有点困惑。有没有办法动态可靠地了解iOS / Android上我的应用程序剩余多少内存?或者这些操作系统的内存管理太难以预测了?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

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

  • 积极地将事情缓存到磁盘上。
  • 收听操作系统提供的通知,告知您的内存存在压力。
  • 设计您的应用程序,以便您可以从最初的启动恢复其最后的UI状态:应用程序启动和任务切换以相同的方式呈现给用户,他们不会,也不应该需要了解差异。

如果您确实使用了越来越多的内存,操作系统将尝试终止其他应用程序以为您腾出空间。这意味着,再见Facebook,再见Twitter,再见邮件,再见联系人。您的用户注意到,并且他们选择不经常启动您的应用,或者不那么有利地查看它。