学会正确关闭android进程(任务管理=徒劳无功)

来源:互联网 发布:linux下yum下载rpm包 编辑:程序博客网 时间:2024/04/30 06:22

我刚从WM阵营转过来,第一次使用安卓的时候,觉得很不习惯,因为我发觉进程管理软件根本就是个摆设,一些软件你关掉了,马上又会运行,当初用GO桌面自带进程管理,感受特别深刻,当时我用华为U8500,弄得自己都快要崩溃。。后来翻阅了大量资料,有种豁然开朗的感觉。。原来如此。 



      简单来说吧,安卓的进程管理机制是事件触发式,比如开机时、开机后、网络连接更改、电量不足、电量充足、时间更改、插上电源等等这些状态的改变都可看作一个事件,安卓系统允许程序关联这些事件(这个在程序开发中设定的),比如关联开机后,差不多就相当于我们一般说的开机启动了。但是安卓系统可以允许一个程序关联多个事件,拿谷歌地图来说吧,它关联的事件有“开机后、电量不足、电量充足、安装应用程序、卸载应用程序、更新应用程序、插上电源”等等。。。中间任何一个状态改变,系统都会自动运行谷歌地图进入后台,你说任务管理器得多少次才能完全结束呢?



       安卓为什么要这样做呢?其实这样做的目的是为了提高程序运行的效率。举例来说,当你打开WIFI时,肯定要上网,系统就会调入一些上网的关联程序进入后台休眠(只占用内存,不占用CPU资源),当你真正需要运行这些程序的时候,系统直接把程序从后台转到前台运行,这样大大提高了程序的运行效率,我觉得这也是统筹方法的一种应用吧。至于说会不会软件一直启动会把内存占满,这个不用担心,当系统内存低于某个值时,内存管理机制会根据进程的优先级来关闭后台进程。但是呢,在硬件配置飞速发展的今天,像小米手机,即便是一步步加载程序也是秒速来算的,所以这个运行效率也没有得到多大的体现。鉴于一些软件进入后台不只是休眠,可能会有些费电,所以我们不如把这个事件触发的关联切断。怎么切断?



     我觉得一个软件比较好,Autostarts启动项管理,这个软件就是针对这个而生的,它只做这个,做完退出,不会像其他进程管理一样常驻内存。打开来,里面有按事件分组,一个事件下面列出所有关联这个事件的所有程序;也可以按程序分组,一个程序下面列出这个程序关联了哪些事件,你把觉得没有必要关联的事件触发禁用掉就好了。如果禁用掉之后,这个程序还会自动运行,你可以再次打开Autostarts,按菜单键—查看,把隐藏未知事件取消勾选,可能这个程序关联了Autostarts搞不明白的事件,如果有,禁用之。



注意:搞这个是有风险,黄色的显示是系统进程,禁用的时候会有提示,如果你没有把握就留着。不过也不要太担心,如果禁用错了导致某个功能无法使用,再启用就可以了。另外程序重新安装或者作了升级,会重建事件触发关联,要重新运行Autostarts切断它。



PS:其实安卓的进程机制是很复杂的,前台进程(foreground),可见进程(visible),次要服务(secondaryserver),后台进程(hidden),空进程(empty),至于他们究竟运作,我们没有必要太了解,知道个大概就好了。



PS2:像小米自带的任务管理器还要不要用呢,要,因为某些程序你打开后不能完全退出,需要用那个来结束。运行大的游戏之前最好释放一下内存。



有些进程管理软件,需要常驻内存,等进程运行就把进程杀掉,还美其名曰自动杀进程,其实傻得可爱,该软件不需要常驻内存,运行一次,切断与应用程序触发关联就可以退出了。

************************************************************************************************************************************

Android用户的一些误区——关于进程管理

转自:http://www.cnbeta.com/articles/151415.htm

一个极其意外的习惯——进程全杀、禁止自启动
记得刚刚开始用i5700时,我和很多人有着一个一样的习惯——全杀进程。i5700的ram很小,而我又有一边开着UC一边开着校内一边开着iReader看书的恶习,通过诸如Advanced task killer之类的软件清理进程,看到空闲ram一下子变多的时候容易有一种虚幻的快感。

后来开始做Android程序,特别是了解到Android系统进程管理(特别是后台管理和自动释放优先级低的进程换取空闲ram)后,才开始明白,当一个程序放到后台时,系统可能将数据保存起来而让程序进行休眠,或者仅仅运行部分服务,仅仅当收到相关的申请时才恢复部分进程,处理完之后结束进程而保留服务——这些都是自动处理的,也就是说,如果用户运行的软件都是按照Android思想而设计的,那么除了明确有退出按键的一部分大型程序外,其他程序是都可以运行后扔到后台不用再管了的,当某个程序需要更多ram时,系统会自动释放掉一些不重要且最近没有使用的程序;而当你打开某个曾经打开的程序时,系统会先检查ram里是不是有这个程序的部分进程,然后进行恢复,这样可以更快打开它。

当然了,如果手机本身ram很小而且cpu不给力,系统自然会很频繁的终止进程释放内存,这就使得许多小内存的手机用起来感觉一卡一卡的了。于是很多论坛都开始讨论怎么样使得全杀过后空闲内存更大、怎样禁止自动启动某些进程——结果空闲ram确实大了,用起来反而更卡了——随便切换个程序(如看书的时候来了个电话)系统都要重新启动几乎所有相关的进程,怎么能反应不迟钝。

Android用RAM的方式,跟windows、WM、Sybiam是两回事。在Android里,RAM被用满了是件好事。它意味着你可以快速打开之前打开的软件,回到之前的位置。所以Android很有效的使用RAM,很多用户看到他们的RAM满了,就认为拖慢了他们的手机。而实际上,退出后重启这些程序才真正拖慢了手机的响应。而且这些自动杀进程的软件本身是个时刻活跃的进程,它始终在后台保持活跃使得CPU难以消停,反而增加了耗电量。

这个问题最终我觉得应该埋怨程序员。许多国内的Android程序员编写的程序根本就没有对进程进行分类,总是试图将所有进程都保留在内存里(例如某著名手机浏览器)!这就使得这些程序即使放到后台了,它也不许系统对其进程进行释放。WM、Sybiam系统里的内存管理没有这么智能,于是习惯了这种方法的程序员以及用户就把这种内存管理方式和使用习惯用到了Android上。所以这里建议,对于很多国内软件(一般都至少还是会有个退出按钮的),用完之后还是按一下退出吧,而对于规范化的程序,以及系统自带的那些程序(例如google的程序基本都没有退出),用过之后放后台就好。



原创粉丝点击