智能手机的确会越用越慢,这是一个不争的事实。
今天,让我站在一个Android程序开发者的角度,告诉你为什么会这样。
首先,我要告诉大家,Android是一个基于java的移动平台。
对于Java,大家并不陌生,以后的手机上经常有Java模拟器。
Java本身就是为移动平台定制的系统,为了兼容各种终端(包括手机,电视盒,GPS),Java使了用虚拟机来统一标准。
所有程序几乎都运行在自己的虚拟机中,这是java程序效率不高的一个原因。
接下来,需要纠正一个误区。
大部分人以为,按了HOME键(小房子)之后,程序还在后台运行。
Android程序的界面,主要由Activity构成,也就是平常点击图标时的那个窗口。
而窗口内容是一个View,可以随意切换。
当然,一个程序中也可以包括多个Activity,也可以任意切换。
一个Activity启动时,会经历onCreate,onResume等一系列过程,这时程序在运行中。
当程序不可见时,包括被切换,被退出,回到桌面等,会被调用onPause。
由名字就可以知道,是一个暂停的过程。
之后,程序便不再运行。
虽然,程序没有在运行中,但是Android和Windows不同,并不会马上回收这部分内存。
如果程序还在内存中,并且用户重新使用这个软件,那么Android系统会直接调用内存中的程序,并从onResume开始重新进入。
程序会和刚才离开的时候一模一样。
这是Android快速启动程序的一个方法。
总结成一句话,退出的程序,只占内存,不占CPU。
最后,要说的是Android的内存回收机制。
Android的内存回收机制,是一个不确定的回收方法。
它会不定时地回收内存,具体是什么时候呢?
需要的时候!!
这个回答好贱啊,但的确是这样的。
比如你需要启动一个游戏,但是游戏需要的内存不够,则系统会开始清理内存。
清理的过程太血腥了,从优先级最低的开始。
Android的优先级太复杂了,没法一一说来。
简而言知,就是现在看得到的程序,一定是最优先的,一般不会被清理。
所以有时候Android系统崩溃,是因为一个可见的,正在使用的程序需要过多内存,而它又不能清理掉这个程序,就把自己杀了。
多么舍身取义啊。
其次是服务,为一个可见的,正在使用的程序,优先级也是很高的,一般不会被清理。
最后是已经暂停的程序,就是你按了Home或者返回键退出,但还停留在内存的程序。
一般系统最优先考虑杀死这些程序,系统会告诉程序,你要死了,保存一下自己现在的状态吧,如果有什么没做完的赶快做完它吧,然后就杀了它。
刚才说了,在程序不可见时,它已经被暂停了,不会再消耗CPU了。
那为什么手机会越用越慢呢?
(底下一片骂声,老子的程序明明还在下载东西,哪里有暂停,你放屁!!!)
八戒你别急嘛。。。那是服务还在运行。
大部分程序的下载或者其他耗时的过程,都需要多线程来完成,或者启动一个服务。
这个服务会一直运行,直到需要它停止时,才会被停止 。
比如说,你的QQ,在你退出后,其实消息收接服务还在运行,这是消耗CPU和内存的。
所以,真正让手机变慢的罪魁祸首,是服务。
系统的自动回收机制,几乎不能把它们回收掉。
所以一些程序,你把它终结了,过一会儿它又出来了,又占内存,在这个过程中,既耗电,又耗CPU。
要真正关掉它,必须把服务关闭。
每个手机查看服务的方法都不同,这里就不说了,而且很多服务需要关闭N次才会真正被关掉。
最后,让我来抨击一下那些恶心的程序吧。
对于在线聊天的软件,QQ,微信等,有在线推送服务也就算了。
普通软件,搞一个开机启动,一个在线更新服务,有意思么?
其实更多的是广告推送服务,那些通知栏里面莫名其妙出现的提示,就是广告推送服务。
今天,让我站在一个Android程序开发者的角度,告诉你为什么会这样。
首先,我要告诉大家,Android是一个基于java的移动平台。
对于Java,大家并不陌生,以后的手机上经常有Java模拟器。
Java本身就是为移动平台定制的系统,为了兼容各种终端(包括手机,电视盒,GPS),Java使了用虚拟机来统一标准。
所有程序几乎都运行在自己的虚拟机中,这是java程序效率不高的一个原因。
接下来,需要纠正一个误区。
大部分人以为,按了HOME键(小房子)之后,程序还在后台运行。
Android程序的界面,主要由Activity构成,也就是平常点击图标时的那个窗口。
而窗口内容是一个View,可以随意切换。
当然,一个程序中也可以包括多个Activity,也可以任意切换。
一个Activity启动时,会经历onCreate,onResume等一系列过程,这时程序在运行中。
当程序不可见时,包括被切换,被退出,回到桌面等,会被调用onPause。
由名字就可以知道,是一个暂停的过程。
之后,程序便不再运行。
虽然,程序没有在运行中,但是Android和Windows不同,并不会马上回收这部分内存。
如果程序还在内存中,并且用户重新使用这个软件,那么Android系统会直接调用内存中的程序,并从onResume开始重新进入。
程序会和刚才离开的时候一模一样。
这是Android快速启动程序的一个方法。
总结成一句话,退出的程序,只占内存,不占CPU。
最后,要说的是Android的内存回收机制。
Android的内存回收机制,是一个不确定的回收方法。
它会不定时地回收内存,具体是什么时候呢?
需要的时候!!
这个回答好贱啊,但的确是这样的。
比如你需要启动一个游戏,但是游戏需要的内存不够,则系统会开始清理内存。
清理的过程太血腥了,从优先级最低的开始。
Android的优先级太复杂了,没法一一说来。
简而言知,就是现在看得到的程序,一定是最优先的,一般不会被清理。
所以有时候Android系统崩溃,是因为一个可见的,正在使用的程序需要过多内存,而它又不能清理掉这个程序,就把自己杀了。
多么舍身取义啊。
其次是服务,为一个可见的,正在使用的程序,优先级也是很高的,一般不会被清理。
最后是已经暂停的程序,就是你按了Home或者返回键退出,但还停留在内存的程序。
一般系统最优先考虑杀死这些程序,系统会告诉程序,你要死了,保存一下自己现在的状态吧,如果有什么没做完的赶快做完它吧,然后就杀了它。
刚才说了,在程序不可见时,它已经被暂停了,不会再消耗CPU了。
那为什么手机会越用越慢呢?
(底下一片骂声,老子的程序明明还在下载东西,哪里有暂停,你放屁!!!)
八戒你别急嘛。。。那是服务还在运行。
大部分程序的下载或者其他耗时的过程,都需要多线程来完成,或者启动一个服务。
这个服务会一直运行,直到需要它停止时,才会被停止 。
比如说,你的QQ,在你退出后,其实消息收接服务还在运行,这是消耗CPU和内存的。
所以,真正让手机变慢的罪魁祸首,是服务。
系统的自动回收机制,几乎不能把它们回收掉。
所以一些程序,你把它终结了,过一会儿它又出来了,又占内存,在这个过程中,既耗电,又耗CPU。
要真正关掉它,必须把服务关闭。
每个手机查看服务的方法都不同,这里就不说了,而且很多服务需要关闭N次才会真正被关掉。
最后,让我来抨击一下那些恶心的程序吧。
对于在线聊天的软件,QQ,微信等,有在线推送服务也就算了。
普通软件,搞一个开机启动,一个在线更新服务,有意思么?
其实更多的是广告推送服务,那些通知栏里面莫名其妙出现的提示,就是广告推送服务。