Android Service基础
Service
Service 是一个组件,用来执行长时间的后台操作,不提供用户界面。
另一个应用组件可以启动一个Service,它将持续地在后台运行,即便是用户转移到另一个应用它也不会停止。
另外,Service可以和另一个组件绑定,与其进行交互,可以进行跨进程的通信(interprocess communication (IPC))。
比如,Service可以用来处理网络交易,播放音乐,执行文件I/O,与content provider交互等,所有这些都是从后台进行。
一个Service可以采取两种形式
startService()方法来启动一个service,这个service为started。
一旦开始,这个service可以一直在后台运行,即便开启它的那个组件被销毁。
通常,一个被开始的组件执行一个单一的操作,并不返回值给它的调用者。
比如,它可以通过网络下载或上传一个文件。当这个操作完成时,service将自己停止。
2.Bound
当另一个组件通过bindService()方法与其进行绑定,service就处于bound状态。
一个被绑定的service提供一个client-service接口,允许组件和其进行交互,发送请求,得到结果,甚至进行跨进程的交互(interprocess communication,IPC)。
一个被绑定的service只有当其他应用组件和其绑定的时候才运行。
当多个组件与其绑定时,当所有组件都unbind时,这个service才被销毁。
注意,service可以同时在这两种状态下工作,它可以被started(为了无限运行),同时允许绑定。
仅仅关系到你是否实现了这两个回调函数:onStartCommand() 允许组件去开启它, onBind() 允许绑定。
注意:一个service运行在其宿主进程的主线程里面。
一个service不会创建它自己的线程,也不会运行在一个分开的进程里面(除非你特殊指定)。
这意味着,如果你的service要做一些耗费CPU的工作或者阻塞性的操作(比如MP3播放或者网络操作),你应该在service里面创建一个新的线程去做这项工作。
通过一个独立的线程,你将减小遇到ANR(Application Not Responding)错误的风险,应用的主线程将能够继续保持用于在activity中和用户交互。
Service使用基础
为了使用service,你必须创建一个继承自Service 的类。
当然,如果你只想提供绑定,你是不需要实现这个方法的。
当另一个组件想要和service进行绑定时(绑定是通过bindService()方法),系统会调用这个onBind()方法。
在你的实现中,你必须提供一个交互的接口IBinder。你必须实现这个方法,但是如果你不想允许绑定,你应该返回一个null。
如果一个组件通过bindService()方法来创建一个service(并且onStartCommand() 没有被调用),那么这个service和创建它的组件有一样长的生命。
一旦service和所有的客户组件解除绑定,系统将会销毁它。
当service不再被使用,被销毁时调用这个onDestroy()方法。
你的service应该实现这个方法,去清理一些资源,比如线程、监听器、接收器等。这是一个service最后调用的方法。
在manifest中声明service
在<application> 中增加一个 <service> 子标签:

<manifest ... >
...
<application ... >
<service android:name=".ExampleService" />
...
</application>
</manifest>

android:name 属性是唯一必须的属性,它指定了service的类名。
更多信息可以看<service> 元素的文档。
和activity一样,service中也可以定义intent filters,这样,其他组件就可以通过隐式的intent来启动这个service。这样,其他应用的组件就有可能开启你的service。
如果你只想在你自己的应用中用这个service,你就不需要(也不应该)提供任何的intent filters。
没有intent filters的service必须通过显式的intent来启动。
另外,如果你想确保你的service是你的应用所私有的,你可以包含android:exported属性,将其设置为false。这样,即便是你的service提供了intent filters,别的应用中的组件也不能使用它。
参考资料
API Guides:Services
http://developer.android.com/guide/components/services.html
API Guides:Bound Services
http://developer.android.com/guide/components/bound-services.html
博客园博客:
http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html
CSDN 博文:
http://blog.csdn.net/fengqiangfeng/article/details/7555213
Android Service基础的更多相关文章
- Android Service基础知识你知道多少?
Android四大组件-Service 多次调用startService会怎样?会执行多次onCreate吗? StopService在哪里调用?stopSelf在哪调用? 怎样使Service被ki ...
- Android Service 基础
启动方式 startService(Intent) 这种方式启动的Service可以在后台无限期的运行,与启动它的组件没有关系. bindService 绑定Service.它提供了一种类似C/S结构 ...
- Service基础使用
Service基础使用 之前的文章一直介绍Activity的使用,很多知识和用法单一的配合Activity使用,这次将总结Android四大组件之二--Service. 本文将要介绍以下内容: Ser ...
- Android Service完全解析,关于服务你所需知道的一切(下)
转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...
- AndroidApplication Fundamentals(Android应用基础)
AndroidApplication Fundamentals(Android应用基础) Android应用采用Java编程语言来编写,AndroidSDK工具编译我们的代码,连同任何数据和资源文件一 ...
- 【Xamarin开发 Android 系列 7】 Android 结构基础(下)
原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...
- Android Service 详解
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面.其它的应用程序组件可以启动一个 Service,即使在用户切换到另外一个应用程序后,这个Service还是 ...
- android图形基础知识
Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...
- 【转】Android Service完全解析,关于服务你所需知道的一切(下) ---- 不错
原文网址:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_bl ...
随机推荐
- yii学习笔记--配置文件的配置
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', 'name'=>'My Web Application',//项目的名称 / ...
- 图像处理------Canny边缘检测
一:历史 Canny边缘检测算法是1986年有John F. Canny开发出来一种基于图像梯度计算的边缘 检测算法,同时Canny本人对计算图像边缘提取学科的发展也是做出了很多的贡献.尽 管至今已经 ...
- 【原】如何获取Java动态生成类?
写作目的:Java大部分框架,如Spring,Hibernate等都会利用动态代理在程序运行的时候生成新的类, 有的时候为了学习,或者深入了解动态代理,想查看动态生成类的源代码究竟长怎么个样子, 通过 ...
- MyISAM和InnoDB索引实现区别
首先来讲MyISAM: MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是 ...
- 【SPOJ】Longest Common Substring(后缀自动机)
[SPOJ]Longest Common Substring(后缀自动机) 题面 Vjudge 题意:求两个串的最长公共子串 题解 \(SA\)的做法很简单 不再赘述 对于一个串构建\(SAM\) 另 ...
- 自言自语WEB前端面试题(一)
刚刚得到通知,明天可能要放半天假,开心的像个200斤的傻子 我怕真是个傻子,是后天 今天的我是依旧痛经的我 于是我又来写博客了 原来,博客竟是痛经良药 接下来请看题,此题,0难度,基本不需要动脑子 J ...
- javascript使用闭包模拟私有属性和方法
最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示申明了一个私有方法,但是javascri ...
- up61博客模版版本v1.0.0
经过两天的努力 终于把博客模板框架写出来了. 表示写模板累死了,很久没有写样式了,还是那么难搞.没有PHP写函数爽. 不管怎么样 第一版出来了.以下是部分截图.预览 当然在示例部署到项目上的时候 ,部 ...
- js中url跳转问题
问题描述:列表中有不同的企业名字,每个企业名字都有一个不同的链接,用id做为参数区分.点击不同的名字,根据id的不同跳转到对应的详情页,设置连接如下: 1. url = http://localhos ...
- 关于jstl的使用
1.jsp中el表达式无法被解析 使用jstl标签的时候,发现el表达式无法被解析,后来查阅资料发现jsp中需要添加<%@page isELIgnored="false" % ...