如何启动Service,如何停用Service(转)
如何启用Service,如何停用Service
Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发现,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:
第一步,继承Service类
public class SMSService extends Service{
}
第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:
<service android:name=".SMSService"/>
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法 都可以启动Service,但是他们的使用场合有所不同。使用startService方法启动服务,调用者和服务之间没有关联,即是调用者退出了,服务 仍然运行。使用bindService()方法启动服务,调用者和服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特 点。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用 startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService方法启动的服务,只能 调用Context.stopService()方法结束服务,服务结束时会调用onDestory()方法。
如果打算采用 Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方 法。这个时候调用者和服务绑定在一起,调用者退出了,系统会先调用服务的onUnbind()方法,接着调用onDestory()方法。如果调用 bindService()方法之前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说 onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方 法,调用该方法也会导致系统调用服务的onUnbind()->onDestory()方法。
服务常用生命周期回调方法如下:
onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次 startService() 或bindService() 方法,服务也只被创建一次。
onDestroy() 该方法在服务被终止时调用。
与采用 Context.startService() 方法启动服务有关的生命周期方法
onStart() 只有采用 Context.startService() 方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用 startService() 方法尽管不会多次创建服务,但 onStart() 方法会被多次调用。
与采用 Context.bindService() 方法启动服务有关的生命周期方法
onBind() 只有采用 Context.bindService() 方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用 Context.bindService() 方法并不会导致该方法被多次调用。
onUnbind() 只有采用 Context.bindService() 方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。
采用Context.startService()方法启动服务的代码如下:
1 public class HelloActivity extends Activity{
2 @Override
3 public void onCreate(Bundle savedInstanceState){
4 ......
5 Button button=(Button)this.findViewById(R.id.button);
6 button.setOnClickListener(new View.OnClickListener(){
7 public void onClick(View v){
8 Intent intent=new Intent(HelloActivity.this,SMSService.class);
9 startService(intent);
10 }});
11 }
12 }
采用Context.bindService()方法启动服务的代码如下:
public class HelloActivity extends Activity{
ServiceConnection conn=new ServiceConnection(){
public void onServiceConnected(ComponentName name,IBinder service){ }
public void onServiceDisconnected(ComponentName name{ }
};
@Override
public void onCreate(Bundle saveInstanceState){
Button button=(Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(HelloActivity.this,SMSService.class);
bindService(intent,conn,Context.BIND_AUTO_CREATE);
//unbindService(conn);//解除绑定
}});
}
}
如何启动Service,如何停用Service(转)的更多相关文章
- Service和Thread的关系及如何启用Service,如何停用Service
Service和Thread的关系: 不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会 ...
- 论Activity及启动模式,Fragment,Service的使用以及生命周期
Activity: 这是我总结出来的,介于Activity生命周期相对较多,我在Google官方的生命周期图上又加了几个常用的,便于大家理解 对于ACtivity,先说说启动模式(ps:复制党去死吧, ...
- Linux系统Docker启动问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service"
在Liunx中使用Docker, 注: Liunx使用的是在虚拟机下的centOS7版本在刚开始安装Docker时没有任何错误, 但是在后续的docker启动过程中, 出现以下问题: [root@zk ...
- Android Service、IntentService,Service和组件间通信
Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...
- 【起航计划 033】2015 起航计划 Android APIDemo的魔鬼步伐 32 App->Service->Foreground Service Controller service使用,共享service,前台服务,onStartCommand
Android系统也提供了一种称为“Service”的组件通常在后台运行.Activity 可以用来启动一个Service,Service启动后可以保持在后台一直运行,即使启动它的Activity退出 ...
- svcs (service status) 和 svcadm (service administration) 使用
1. svcs 显示服务实例的状态信息 svcs - report service status 显示服务状态命令 DESCRIPTION The svcs command displays in ...
- WCF Failed to invoke the service. Possible causes: The service is offline or inaccessible
今天写WCf 时遇到如下报错: 调试过程发现,各个过程都无异常,但是返回给调用端数据时出现如下错误. Failed to invoke the service. Possible causes: Th ...
- 服务链(Service Chaining,or Service Function Chaining,SFC,功能服务链)
Software-configured service chaining provides the capability to dynamically include best-of-b ...
- Service Fabric —— Actor / Stateless Service 概念
作者:潘罡 (Van Pan) @ Microsoft 上一节我们谈到了Stateful Service.在Service Fabric中,Stateful Service是理解Micro Servi ...
随机推荐
- 信号量 sem_t 进程同步
sem_t分为有名和无名.有名的sem_t通过sem_open来创建, 而无名的sem_t通过sem_init的初始化. 用有名的sem_t来进程间同步是件很容易的事情,百度上一搜很多想相关的例子. ...
- Period
uvalive3026:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- HDU 1045 Fire Net(图匹配)
题目大意: 这个是以前做过的一道DFS题目,当时是完全暴力写的. 给你一个N代表是N*N的矩阵,矩阵内 ‘X’代表墙, ‘.’代表通道. 问这个矩阵内最多可以放几个碉堡, 碉堡不能在同一行或者同一列, ...
- Topcoder 好题推荐
SRM SRM147 DIV1 1000pt DP SRM148 DIV1 1100pt 递归 SRM149 DIV1 1000pt math SRM150 DIV1 500pt DP SRM469 ...
- Mutex — Windows API
Mutex是互斥体的意思,当一个线程持有一个Mutex时,其它线程申请持有同一个Mutex会被阻塞,因此可以通过Mutex来保证对某一资源的互斥访问(即同一时间最多只有一个线程访问).调用Create ...
- K - Treasure Exploration - POJ 2594(最小路径覆盖+闭包传递)
题意:给一个有向无环图,求出来最小路径覆盖,注意一个点可能会被多条路径重复 分析:因为有可能多条路径走一个点,可又能会造成匹配的不完全,所以先进行一次闭包传递(floyd),然后再用二分匹配的方法求出 ...
- 共享一个防止脚本重复启动的shell脚本
项目的一个需求:为防止脚本重复调度,导致同时运行时相互冲突,需要在脚本运行开始前创建一个文件,结束时删除. 脚本启动时判断一下文件是否存在,如果存在则退出. 最开始这样做没发现问题,但跑一段时间后,发 ...
- Java学习路线图·影响一代又一代程序员的经典书籍!(转)
转自:http://www.douban.com/group/topic/50353428/ 基础篇 ·Java核心技术 卷1 基础知识(原书第9版)最新版·中文版 第13届Jolt生产效率大奖获奖图 ...
- C#三层开发做学生管理系统
1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实 ...
- 实战:mysql版本号升级
/***************************************************** mysql 5.6.19 升级到5.6.21 ********************** ...