通过终止进程来清理内存的方案是不合适的,理由如下:
1、 android 有自身的进程和内存管理机制,其设计规范是要保证程序尽可能快地启动,这就要求程序退出后仍然占用内存保存数据;
2、 android 的内存管理策略保证在新程序载入时有足够的内存,当内存不足时会自行关闭优先级低的进程来释放内存;
3、 进程数据长期缓存在内存,对于 android 来说不是缺陷,而是优势,它尽可能地确保程序的启动质量以提升用户体验,人们长期被强迫症困扰,一直误以为大量占用内存是低效的表现,这与人们长期使用桌面系统不无关系;
4、 我们的另一个误区是,占用内存耗电,其实不然!真正耗电的幕后推手是 CPU,反复清理内存需要CPU反复地工作,所以清理内存反而耗电;
网上一个形象的比喻:你在图书馆查资料,一种方案是把可能需要的资料全部从书架上取下来放到桌上,可能会有冗余,但不必经常去书架取书;另一种方案,书桌上只放当前正在查阅的资料,查完马上放回书架,这样虽然书桌上很干净,但你需要反复从书架上取书放书。这里书就好比内存,取书放书的动作好比 CPU 的工作。显然第一种方案更加高效和轻松。
一些靠谱的资料:
阐述为什么不需要终止进程来释放内存的原因http://android.nextapp.com/site/fx/doc/exit
两位谷歌工程师的建议:
Romain Guy :用户不要去做终止进程来释放内存的事,这与 android 的应用设计框架相悖,应该交由系统去做(这里的用户既是指使用 APP的用户,也是指APP本身或APP开发人员)https://groups.google.com/forum/#!topic/android-developers/G_D3pKnGLt0 http://stackoverflow.com/questions/2042222/close-application-and-launch-home-screen-on-android
Dianne Hackborn : 强烈反对使用 System.exit() 来终止程序,请不要如此设计你的 Android 应用 https://groups.google.com/forum/#!topic/android-developers/Y96KnN_6RqM