如何强制暂停进程的内存进入交换?

时间:2012-05-27 16:55:41

标签: android memory-management virtual-memory android-lifecycle swapfile

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Android已经处理暂停应用程序的内存,但不是将进程交换到某些虚拟内存,这可能很昂贵,如果需要,它可以将它们转储以释放内存。

来自The Android Developers documentation - Managing the Activity Lifecycle

  

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

活动的onPause()是保证运行的最后一个生命周期回调,允许它保存其状态,之后Android可以根据需要愉快地转储它。

来自同一文档中的further

  

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

强调添加

因此,您可能会遇到的瓶颈可能与应用程序本身有关,而与操作系统无关,保存Activity状态仍然可能比尝试存储内存内容快得多。一个完整的应用程序。