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 ...
随机推荐
- 时间戳 JS PHP MYSQL
Unix 时间戳 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) JS var strtime = '2014-04-23 18:55:49:123 ...
- [ Python - 14 ] python进程及线程编程
什么是进程: 简单来讲,进程就是操作系统中运行的程序或任务,进程和程序的区别在于进程是动态的,而程序是静态的.进程是操作系统资源管理的最小单位. 什么是线程: 线程是进程的一个实体,是cpu调度和分派 ...
- 《Java编程思想》笔记 第十五章 泛型
1 泛型 “泛型”意思就是适用于许多类型. 使用泛型的目的之一: 指定容器持有什么类型,让编译器确保正确性,而不是在运行期发现错误. 这个容器可以看成是有其他类型对象作为成员的类,而不单单只是JDK中 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- lucene api
设置重新打开索引目录(清空) IndexWriterConfig conf = new IndexWriterConfig(new WhitespaceAnalyzer());conf.setOpen ...
- Interface与abstract类的区别
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必 ...
- ubantu16.04安装配置samba服务(原创)
1.安装samba服务 $ sudo apt-get install samba samba-common$ sudo apt-get install smbclient 如果你开启了防火墙,关闭: ...
- AC日记——[NOIP2015]运输计划 cogs 2109
[NOIP2015] 运输计划 思路: 树剖+二分: 代码: #include <cstdio> #include <cstring> #include <iostrea ...
- 跨机房openvpn互联
实现目标:北京的client能访问上海的client (1)vpn server配置 1)基本配置 关闭selinux sed -ri '/^SELINUX=/cSELINUX=disabled' / ...
- validate+jquery+ajax表单验证
1.案例 1.1 Html form表单内容 <form class="cForm" id="cForm" method="post" ...