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 ...
随机推荐
- testng+IEDriverServer+yum+tomcat下载软件包
testng框架链接:http://files.cnblogs.com/files/linxinmeng/testng%EF%BC%88selenium%E6%A1%86%E6%9E%B6%EF%BC ...
- poj 2318(叉积判断点在线段的哪一侧)
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13120 Accepted: 6334 Description ...
- Java处理文件BOM头的方式推荐
背景: java普通的文件读取方式对于bom是无法正常识别的. 使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出 ...
- 内存可见性,指令重排序,JIT。。。。。。从一个知乎问题谈起
在知乎上看到一个问题<java中volatile关键字的疑惑?>,引起了我的兴趣 问题是这样的: package com.cc.test.volatileTest; public clas ...
- k-密码
链接:https://www.nowcoder.com/acm/contest/90/K来源:牛客网 题目描述 ZiZi登录各种账号的时候,总是会忘记密码,所以他把密码都记录在一个记事本上.其中第一个 ...
- shell脚本学习(二)
shell传递参数 shell脚本在执行是可以传递参数,脚本内获取参数的格式为:$n,n为一个数字,1为第一个参数,2为第二个参数,以此类推 其中,$0代表了要执行的文件名 实例: 代码如下: #!/ ...
- 51nod 编辑距离问题(动态规划)
编辑距离问题 给定两个字符串S和T,对于T我们允许三种操作:(1) 在任意位置添加任意字符(2) 删除存在的任意字符(3) 修改任意字符 问最少操作多少次可以把字符串T变成S? 例如: S= “AB ...
- RPD Volume 172 Issue 1-3 December 2016 评论01
Evaluation of Imaging Dose From Different Image Guided Systems During Head and Neck Radiotherapy: A ...
- 【线段树】bzoj3038 上帝造题的七分钟2 / bzoj3211 花神游历各国
暴力修改,记录一段是否全部为1或0,若全是了,则不再修改. 注意3211一定要判是否为0,否则会T得惨无人道. #include<cstdio> #include<cmath> ...
- 将js方法名作为参数传给js方法
1,demo1:参数function无参 <script> function fun1(){ fun3('fun4'); } function fun2(){ fun3('fun5'); ...