zoukankan      html  css  js  c++  java
  • <转> service和Thread区别 加深印象。

    原文链接

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

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

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

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

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

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

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

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

  • 相关阅读:
    Python
    git SSL certificate problem: unable to get local issuer certificate
    Chapter 1 Securing Your Server and Network(13):配置端点安全性
    例说linux内核与应用数据通信系列
    Android 学习历程摘要(三)
    线程调度策略SCHED_RR(轮转法)和SCHED_FIFO(先进先出)之对照
    内核工作队列【转】
    android 电池(三):android电池系统【转】
    android 电池(二):android关机充电流程、充电画面显示【转】
    android 电池(一):锂电池基本原理篇【转】
  • 原文地址:https://www.cnblogs.com/sunzhuo1228/p/4328837.html
Copyright © 2011-2022 走看看