1

我正在寻找改进 UI 以防止内存为 256MB 的 Android 设备滞后的方法。内存非常有限,以至于大型前端应用程序会触发大量其他应用程序的交换。

这个想法是:如果一个后台应用程序(例如 Facebook 应用程序)不需要持续运行,不像电话,它必须保持不间断,只需暂停该应用程序的进程,并每隔几分钟继续运行一次以检索更新,仅当手机在口袋里闲置时,然后再次暂停该过程。

为了减少换出其他应用程序内存的延迟,我希望暂停的应用程序的内存可以主动交换到磁盘/闪存,以便可以立即释放 RAM,以满足前端应用程序的需求。(参考速度:class 10 SDHC:10MB/s 写入,所以如果网页需要占用 20MB RAM,浏览器会延迟 2 秒)

所以我的问题是:如何强制系统将暂停进程的私有内存交换到磁盘/闪存中?

4

2 回答 2

0

如果需要 ram,则不活动的进程会自动进入交换,因为他的优先级较低(请参阅 android 上的优先级)。

从理论上讲,10 级卡是好的,只能在 2 秒内完成交换,但卡的内存控制器太长,您将有 5 或 6 秒。拥有更多的类 6 是没有用的。

于 2012-08-14T10:32:31.497 回答
0

Android 已经处理了暂停应用程序的内存,但与其将进程交换到一些可能很昂贵的虚拟内存,它可以在需要时将它们转储以释放内存。

来自Android 开发者文档 - 管理 Activity 生命周期

如果一个活动被暂停或停止,系统可以通过要求它完成(调用它的 finish() 方法)或简单地终止它的进程来将它从内存中删除。当活动再次打开时(在完成或杀死之后),必须重新创建它。

ActivityonPause()是保证运行的最后一个生命周期回调,允许它保存其状态,之后 Android 可能会在它认为合适的时候愉快地转储它。

从同一文件中进一步:

...如果系统必须在紧急情况下恢复内存,则可能不会调用 onStop() 和 onDestroy()。因此,您应该使用 onPause() 将关键的持久数据(例如用户编辑)写入存储。但是,您应该选择在 onPause() 期间必须保留哪些信息,因为此方法中的任何阻塞过程都会阻塞到下一个活动的转换并减慢用户体验

重点补充

因此,您可能遇到的瓶颈可能是应用程序本身,而不是操作系统,并且保存Activity状态仍然可能比尝试存储整个应用程序的内存内容要快得多。

于 2012-08-15T11:36:13.983 回答