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

Mat*_* P. 6 android memory-management ios

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

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

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

[NSProcessInfo processInfo].physicalMemory
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢您的帮助 !

dam*_*ian 2

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

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

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

如果您确实使用越来越多的内存,操作系统将尝试终止其他应用程序以为您的应用程序腾出空间。这意味着,再见 Facebook、再见 Twitter、再见邮件、再见通讯录。您的用户注意到,因此他们选择减少启动您的应用程序的频率,或者对您的应用程序的评价较差。