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 ...
随机推荐
- DRF基类APIView提供的Request、Response和序列化器的综合使用
关于DRF基类APIView提供的Request和Response对象的作用,可以看我的另一篇博文:https://www.cnblogs.com/chichung/p/9939864.html 综合 ...
- SQLAlchemy技术文档(中文版)-下
10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...
- mysql:functional dependency
0down vote First, a functional dependency in the form A->B means that, given one value for A, we ...
- centos 查看 arp
yum install tcpdump -y tcpdump arp :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ...
- OSSIM 4 组件目录
在查找openvas问题的时候,发现: 主要组件的配置文件目录:/etc/default主要组件的安装目录:/usr/share 感觉和kali linux的的结构类似.
- EASYUI datagrid批量修改与提交
http://www.cnblogs.com/szytwo/archive/2012/08/29/2662169.html 前台主要代码: <script type="text/jav ...
- 大型vue单页面项目优化总结
这是之前在公司oa项目优化时罗列的优化点,基本都已经完成,当时花了点心思整理的,保存在这里,方便以后其他项目用到查漏补缺. 1.打包文件中的app.js文件放入cdn,加快页面首次加载速度 2.提取公 ...
- 【主席树】bzoj2588 Spoj 10628. Count on a tree
每个点的主席树的root是从其父转移来的.询问的时候用U+V-LCA-FA(LCA)即可. #include<cstdio> #include<algorithm> using ...
- STL之全排列
描述 使用STL中的next_permutation函数输出一个序列的全排列. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector<int> ...
- 重写规则为什么要options +followsymlinks
重写规则为什么要options +followsymlinks Web服务器的Apache安装编译成功mod_rewrite编译成模块,但当我在网站根目录下放了一个.htaccess配置文件,却得到了 ...