如何启动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 ...
随机推荐
- 【HDOJ】1561 The more, The Better
树状DP. /* 1561 */ #include <iostream> #include <cstdio> #include <cstring> #include ...
- SPFA 最短路径打印方法
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> ...
- 【模拟】XMU 1055 数七
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1055 题目大意: 报数游戏,不能报7的倍数和2进制下含有111的数. 给定n,m(1& ...
- 【模拟】Vijos P1062 迎春舞会之交谊舞
题目链接: https://vijos.org/p/1062 题目大意: 一群男女站成一排,一男一女配对,女的只找左边第一个空闲的男生,给定前n个女生左边的额男生个数,问前n个女生到男伴之间共有几个男 ...
- selenium webdriver python 环境搭建
1. 安装python https://www.python.org/getit/ 选择2.7版本,下载安装即可. 验证是否安装成功:打开cmd,输入"python -V",显示p ...
- N - Optimal Milking - POJ 2112(二分图多重匹配+Floyd+二分搜索)
题意:有K太挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远 分析:应该先使用floyd求出来点之间的最短路??(不晓得给 ...
- Gradle构建Java Web应用(转)
转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...
- SQL注入语句 (很全)
1.返回的是连接的数据库名and db_name()>02.作用是获取连接用户名and user>03.将数据库备份到Web目录下面;backup database 数据库名 to dis ...
- 无锁,线程安全,延迟加载的单例实现(C#)
单例(singleton)是非常常见,也非常有用的设计模式,当然了, 面试中也是经常会被问到的:)在几乎所有的项目中都能看到它的身影.简而言之,单例保证了一个自定义类型在整个程序的生命周期只被创建一次 ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...