<转> service和Thread区别 加深印象。

原文链接

http://blog.csdn.net/imstephen/article/details/20299941

 我们知道,一般情况下,一个应用程序对应一个进程,当然也有例外,比如在一个应用程序中打开浏览器时,这时就产生了另一个进程,也就是浏览器的进程。这时,当我们关闭了该应用之后,会发现该应用的进程并没有被销毁。实际上,由于这些应用是用于手机上的,用户可能会频繁使用这些应用,谷歌工程师为了提高我们使用这些应用的效率,当我们关闭一个应用时,只是将界面关闭了,并没有将其进程彻底杀死。

这样做固然提高了我们打开应用的速度,但同时也产生了另一个麻烦。想象一下,如果我们打开了几十个应用,而每个应用的进程仍然在后台运行,那么对手机本身将会是非常重的负担,所以,谷歌工程师也考虑到了这个问题。也就有了以下这个概念,进程优先级。

谷歌工程师把进程的优先级分为五种,分别是:前台进程,可见进程,后台进程,服务进程,空进程。

这五个进程按优先级从高到低排序,优先级别越低,就越有可能在手机的内存空间不足的时候被系统回收。

前面我们讲到,如果要执行一个耗时的操作时,往往是在主线中开启一个子线程,然后在子线程中来完成耗时操作,而我们同时知道,服务其实也是为了执行耗时的操作而长时间运行在后台的一组组件,那如此一来,这跟我们在主线程中直接new一个子线程有什么区别呢? 

区别其实就在于上面所讲的优先级。

比如我们开发了一个天气预报的应用,这个应用要求每隔一个小时获取当前最新的天气信息,这时我们最好用service来操作,想象一下,如果我们在后台new一个线程,我们知道,线程是运行在进程里的,一旦应用被关闭了,也就是说这个进程变成了空进程,那么就很容易被系统回收,如此我们将不能及时获取到最新的消息了。

原文地址:https://www.cnblogs.com/sunzhuo1228/p/4328837.html