前言

今天折腾手机的时候发现昨天刷的系统有个bug,所以又去逛了论坛,找了个rom刷上了,在逛论坛的时候发现了一篇帖子,让我这个从事Android方面工作的新手也对Android有了一个新的认识!

摘录如下


不用在意剩余内存的大小,其实很多人都是把使用其他系统的习惯带过来来了,Android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动使用的速度。这本来就是Android标榜的优势之一,如果人为关闭进程,没有太大必要。特别是使用自动关进程的软件。

到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?
其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上,有个更改内存阀值的程序可以有一定改善。但改动也可能带来一些问题,取决于值的设定。

那么,进程管理软件有无必要呢?答案是有的,就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。

谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电;当你了解一下Android后台的原理,你就会明白了!

Android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是Service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个Android的优点呢。还有一个,为什么Android一个应用看起来那么耗内存。大家知道,Android上的应用是java,当然需要虚拟机,而Android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。以上这些设计确保了Android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。


以上为摘录内容

最后

下边的一点儿纯属个人观点
看完上边的不知道会不会改变大家对Android手机的使用习惯呢!?我是打算按照这种说法测试下!

同时看了上边这个介绍,而且通过我的观察,在开发应用的过程中,虽然我们在回到系统主界面时,我们好像是退出了应用程序,但是当我们进入到程序管理界面时,可以看到此应用程序显示还是在运行的,也许程序并没有真正的在运行,但是我们却没有真正的关掉程序!

我们在开发过程中是没有提供退出应用程序的方法的,一般都是去关闭创建的Activity,但是finish(); System.exit(0);这两个方法只是关闭了应用的activity;当我们去程序管理界面时,同样的我们并没有退出应用程序!

由此可见Google在开发Android系统的时候没有提供手动关闭进程的方法!

经过我这几天的测试,发现在后台的进程并不会去浪费电量,除非这个应用是一个服务,需要在后台继续处理连接或者运行什么的,比如QQ、微博、音乐播放器,只有在后台继续运行的才会去消耗系统资源,其它的是不会的,所以在我们的内存足够的情况下,我们实际上是没有必要时刻去关闭后台进程的,当然如果你长时间不使用的话关闭还是有必要的(比如一个应用你一个月才用那么一次,就没有必要让他在后台进程中呆着),还有如果内存小的话,比如Android中的低端机还是要关闭的,不然手机会运行很慢!

最后的最后

为什么又来一个最后呢,因为这篇文章是之前很早发布的了,当时的观点只是针对当时的环境,现在这种方式已经完全不适合当前的手机系统了,各大应用厂商现在都在想方设法让应用在后台运行,各种推送等三方SDK挖空心思在后台运行,抢占系统资源,会导致系统越来越慢,所以Android已经不是那个纯洁的Android