Service是Android中一种非常重要的组件,一般来说有两种用途:用Service执行长期执行的操作,而且与用户没有UI界面的交互;某个应用程序的Service能够被其它应用程序的组件调用以便提供更广泛的使用。

要想使得自己写的Service能够正常执行。必须在AndroidManifest.xml中通过标签注冊Service。相似于通过标签注冊Activity一样。有两种方式使用Service。一种是通过Context类的startService方法启动Service,还有一种是通过Context类的bindService方法启动Service。

须要注意的是,与其它的应用程序组件一样,Service默认情况下是执行在其所在宿主进程的主线程中的。也就是说假设我们在Service要做一些CPU密集型操作(比方播放MP3)或堵塞式操作(比方网络请求)。那么主线程就会卡死,出现ARN(Application Not Responding)程序无响应现象,为了解决这样的问题,我们应该在Service中创建一个新线程。然后将这些耗时操作放入到该新创建的线程中去执行,这样不会堵塞主线程。

为了搞明确Service是什么,我们首先要知道Service不是什么:

a. 首先Service不是还有一个独立的进程。 Service不会自己开辟一个新的进程,除非特别指定,默认情况下Service是执行在应用程序所属的进程中。

b. Service不是还有一个新线程。Service的操作都是在主线程中执行的,为了避免堵塞主线程,在Service中应该将耗时操作放入到一个新线程中执行。

通过上面的描写叙述我们知道,Service事实上非常easy(没有开创新的进程和新的线程),Service提供了下面两个基本的特性:

a. 作为应用程序的一部分执行在后台,而且甚至不须要和用户进行交互。这样的情况下,我们一般调用Context的startService方法(比方在Activity中调用startSerivce方法)启动service。

b. 作为某个应用程序的组件暴露出去,使得其它的应用程序能够调用该Service。

这样的情况下,我们一般调用Context的bindService方法,比方我们有两个应用App1和App2,在App1中我们有一个Service叫做App1Service,在App2中我们有一个Acitivity叫做App2Activity,即便App1没有启动,我们在App2的App2Activity中也能够通过调用bindService启动App1中的App1Service。而且通过调用bindService之后,在Service和调用者之间会建立连接进行程序间交互。

兴许会写文章分别介绍startService与bindService的使用演示样例以及生命周期。

相关博文:

Android中startService的使用及Service生命周期

Android通过startService播放背景音乐简单演示样例

Android通过startService实现批量下载演示样例

Android中IntentService的使用及其源代码解析

Android中bindService的使用及Service生命周期

Android中通过Messenger与Service实现进程间双向通信

Android中Service概述的更多相关文章

  1. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  2. Android中Service的使用详解和注意点(LocalService)

    Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...

  3. Android中Service的一个Demo例子

    Android中Service的一个Demo例子  Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding.  本文,主要贴代码,不对Servic ...

  4. Android中Service深入学习

    概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...

  5. Android中Service和Activity之间的通信

    启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...

  6. Android中Service 使用详解(LocalService + RemoteService)

    Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  7. Android中Service的使用

    我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一 ...

  8. (六)Android中Service通信

    一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 ...

  9. android中service启动后台程序

    Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...

随机推荐

  1. js判断对象为空

    http://www.jb51.net/article/42713.htm var isEmptyValue = function(value) { var type; if(value == nul ...

  2. 在 C# 中通过 P/Invoke 调用Win32 DLL

    在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 | 更新日期 : 1/13/2005 Jason Clark 下载本文的代码: NET0307.exe ( ...

  3. DRF的认证与权限功能

    认证 1.全局配置 在setting.py进行配置. REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( # 'rest_framework. ...

  4. JavaScript的for循环语句

    语法格式 for(初始化值;循环的条件;每一次循环的递增值){ // 循环的条件结果为true,则执行循环体中的代码 } 示例(打印出1-10之间的整数): for(var a=1;a<=10; ...

  5. [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 3202  Solved: 1198[Submit][Status ...

  6. Python的异步编程[0] -> 协程[1] -> 使用协程建立自己的异步非阻塞模型

    使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助.主要参考为 ...

  7. Linux命令之crontab

    crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab命令被用来提交和管理用户需要周期性执行的任务,与win ...

  8. UOJ Rounds

    UOJ Test Round #1 T1:数字比大小的本质是按(长度,字典序)比大小. T2:首先发现单调性,二分答案,用堆模拟,$O(n\log^2 n)$. 第二个log已经没有什么可优化的了,但 ...

  9. [POJ1801]Formula Racing(模拟)

    Formula Racing Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 289   Accepted: 77 Descr ...

  10. 【三维偏序】【分块】bzoj3262 陌上花开

    裸的三维偏序. 对x坐标排序,y.z坐标分块.复杂度O(n*sqrt(n*log(n))).代码很短. #include<cstdio> #include<cmath> #in ...