Android中Service概述
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概述的更多相关文章
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
- Android中Service的一个Demo例子
Android中Service的一个Demo例子 Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding. 本文,主要贴代码,不对Servic ...
- Android中Service深入学习
概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...
- Android中Service和Activity之间的通信
启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...
- Android中Service 使用详解(LocalService + RemoteService)
Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...
- Android中Service的使用
我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一 ...
- (六)Android中Service通信
一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 ...
- android中service启动后台程序
Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...
随机推荐
- 前段基础JavaScript
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...
- MVC模型绑定
在项目中使用MVC的时候,我们无需像WebForm那样手动获取值再赋值到Model上,这得益于MVC的模型绑定,下面就介绍下复杂类型的模型绑定 Controller: public class Hom ...
- centos6 部署strongloop
1.安装node 1)下载官方二进制包 cd /opt wget https://nodejs.org/dist/latest-v7.x/node-v7.10.0-linux-x64.tar.gz 2 ...
- CF 990B. Micro-World【数组操作/贪心/STL/二分搜索】
[链接]:CF [题意]:对任意一个数a[i] ,可以对任意 满足 i != j 且 a[i] > a[j] && a[i] <= a[j] +k 的 a[j] 可以被删掉 ...
- Linux命令之dd
dd [OPERAND] dd 选项 复制一个文件,根据[OPERAND]进行转换和格式化 (1). OPERAND参数 说明1:dd的选项只有’--help’和’--version’,也就是帮助与版 ...
- Android开机过程
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Android开机过程 BootLoder引导,然后加载Linux内核. 0号进程ini ...
- [Lydsy1805月赛] 对称数
挺不错的一道数据结构题QWQ. 一开始发现这个题如果不看数据范围的话,妥妥的树上莫队啊23333,然鹅10组数据是不可能让你舒舒服服的树上莫队卡过的23333 于是想了想,这个题的模型就是,把u到v链 ...
- [Contest20180405]抑制「超我」
古明地恋(koishi)和计算器(calculator)是好朋友.恋恋有一个神奇的计算器,可以进行两个数在模$2^n$意义下的加法运算.计算器上有一个寄存器,一开始寄存器中的数为$0$,每当恋恋输入一 ...
- [BZOJ4538]网络
今天打比赛,毒瘤yww把这题出到$n,m\leq 5\times10^5$,因为不会写整体二分所以来写坑爹的$O\left(n\log_2n\right)$做法 考虑按重要度建权值线段树(相同权值的请 ...
- 【数论】【欧拉函数】bzoj2190 [SDOI2008]仪仗队
由图可知,一个人无法被看到时,当且仅当有 人与原点 的斜率与他相同,且在他之前. ∴一个人可以被看到,设其斜率为y/x,当且仅当y/x不可再约分,即gcd(x,y)=1. 考虑将图按对角线划分开,两部 ...