文档章节

安卓开发startservice 和bindservice详解

f
 fjabing
发布于 2014/02/16 16:51
字数 756
阅读 57
收藏 4

  Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy

  我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

  1 通过startService

  Service会经历 onCreate --> onStart

  stopService的时候直接onDestroy

  如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。

  下次调用者再起来仍然可以stopService。

  2 通过bindService

  Service只会运行onCreate, 这个时候 调用者和Service绑定在一起

  调用者退出了,Srevice就会调用onUnbind-->onDestroyed

  所谓绑定在一起就共存亡了。

  注意:Service的onCreate的方法只会被调用一次,

  就是你无论多少次的startService又 bindService,Service只被创建一次。

  如果先是bind了,那么start的时候就直接运行Service的onStart方法,

  如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,

  只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。

  Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。

  服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。

  这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,

  即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

  如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,

  接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,

  但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

  如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,

  接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,

  接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,

  多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。

  如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.

本文转载自:http://android.tgbus.com/Android/androidnews/201204/424610.shtml

f
粉丝 1
博文 70
码字总数 7656
作品 0
龙岩
私信 提问
Android Service详解

一、Service的种类 1、本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 ...

恰同学少年
2015/07/29
0
0
Android Service两种启动方式详解(总结版)

概念 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalService)和远程服务(RemoteService): 1、本地服务依附在主进程上而不是独立的进程,这样在一定程度...

天王盖地虎626
01/17
0
0
startService与bindService的区别

Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别 执行startService时,Service会经历onC...

亭子happy
2015/02/08
0
0
Android提高第五篇之Service

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次介绍了Activity以及Intent的使用,这次就介绍Service,如果把Activity比喻为前台程序,那么Service就是后台程序,Service...

晨曦之光
2012/03/14
266
0
Android Service启动、绑定后还需要StopService吗?

假设: Activity A 启动(StartService)一个Service后,Activity A销毁了并切换到Activity B(但没有调用StopService,所以Service还在运行)。 然后Activity B 绑定(BindService)这个Service,当...

lwm1368
2014/11/18
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

mysql报错 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

CentOS 6.5 下安装配置 mysql 使用yum安装,具体过程参见最下边的参考文章。 安装之后启动失败: [root@localhost ~]# service mysqld startStarting mysqld: ...

BG2KNT
13分钟前
1
0
IOC的学习(1)

IOC IOC创建bean的4种方式: 无参构造器, 有参构造器,其中<constructor-arg>可以通过index="0"或者type="int"来指定构造方法参数。 静态工厂方法,factory-method。 普通工厂方法,需要指定......

太猪-YJ
26分钟前
1
0
tomcat 莫名奔溃问题

Apr 24, 2019 6:18:11 PM org.apache.coyote.AbstractProtocol pause INFO: Pausing ProtocolHandler ["http-nio-8080"] Apr 24, 2019 6:18:12 PM org.apache.coyote.AbstractProtocol pause......

mellen
44分钟前
3
0
组件开发规范 class名身份识别

组件需要通过一个组件共有的class来标识这个组件,外部调用的时候,可以通过锁定这个class来方便地改变组件的css样式。 设置方式 .my-checkbox { width: 20px; height: 20px; font-...

Carbenson
52分钟前
3
0
如何在工作中快速成长?致工程师的10个简单技巧

阿里妹导读:阿里有句非常经典的土话,“今天的最好表现,是明天的最低要求。”如何挖掘潜能、发现更好的自己?今天,阿里巴巴高级无线开发专家江建明将认知升级的方法总结出来,帮助你获得快...

阿里云云栖社区
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部