`
ruilin521314
  • 浏览: 881351 次
文章分类
社区版块
存档分类
最新评论

service 的两种启动方式:

阅读更多

文章参考 : http://android.tgbus.com/Android/tutorial/201104/347990.shtml

1:startService
Service的生命周期:onCreate --> onStart-> onDestroy

停止服务:service.stopService
2:bindService
Service的生命周期 onCreate --> onBind --> onUnBind --> onDestroy

停止服务:UnbindService,再StopService

【在开发中我发发现,当app执行 Process.killProcess(android.os.Process.myPid()) ; System.exet(0): 的时候】

系统会重启service

针对不同版本的系统。有的系统会执行context.startService 而有的会 执行context.bindService

两者唯一的相同点就是都会重启service

=============================================================================================


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


 一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,对啊,就是stopService不好使了,只能先UnbindService,再StopService,所以是先start还是先bind行为是有区别的。

 如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
  
  如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.


分享到:
评论

相关推荐

    Android 启动 Service(startservice和bindservice) 两种方式的区别

    andrid service 两种启动方式:第一种startservice,第二种bindservice,大家对这两种启动方式的区别了解吗,下面跟着小编一起学习吧

    Service的生命周期、两种启动方法的区别

    Service的生命周期、两种启动方法的区别 一、A started service onCreate, onStartCommand, onBind 和 onDestroy。这几个方法都是回调方法,都是由Android操作系统在合适的时机调用的,并且需要注意的是这几个回调...

    Service服务的各种使用方式

    演示了Service的各种使用方式,应可供初学者学习。

    service的启动方式

    service 的两种方式 进程间通信和进程内通信,进程间通信用到了AIDL(android接口描述语言)

    Android中service基本用法,生命周期2

    服务的有两种启动方式,对应两个生命周期 startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和...

    ServiceDemo

    演示了Service两种启动方式与生命周期。

    启动服务并与activity通信

    两种方式启动service比较,activity与service通信

    Android Service的启动过程分析

    Android Service的启动过程分析 刚开始学习Service的时候以为它是一个线程的封装,也可以执行...关于Service的运行状态有两种,启动状态和绑定状态,两种状态可以一起。 启动一个Service只需调用Context的startServ

    Android中service基本用法,生命周期1

    服务的有两种启动方式,对应两个生命周期 startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和...

    Android实验五.doc

    Service有 两种启动方式,对应的,有两种停止方式。 【思考题】 【1】Service的两种启动方式是什么?对应的停止方式是什么? Startservice(普通启动方式)和bindservice(绑定方式)都可以启动service,对应 的停止...

    详解Android Service与Activity之间通信的几种方式

    在Android中,Activity主要负责前台页面的展示,Service主要...接下来我就介绍两种方式来实现Service与Activity之间的通信问题 通过Binder对象 当Activity通过调用bindService(Intent service, ServiceConnection co

    Android中Service源码下载

    该代码描述了Service的生命周期以及播放音乐的使用.两种启动service的方式都有记录。

    Android中 service组件详解

    service组件跟activity组件及其类似,可以说service是没有界面的activity, 当然service的生命周期和activity还是有一定的差别的。...怎么启动service呢,想想启动activity是不是有两种方法:  

    深入浅出Android核心组件Service(一)

    在Android框架中,Service是比较难以理解的一部分,而...在Android中Service的启动方式有两种,今天先发第一种。Service的启动方式一:启动:Context.startService(newIntent(context,xxx.class));停止:Context.stop

    Android IPC机制绑定Service实现本地通信

    **写作原因:跨进程通信的实现和理解是Android进阶中...相比第一种方式,bindService()能够更加灵活地实现与启动端Activity的数据通信,第一种启动方式启动Activity与Service之间并没有直接关联,难以直接实现通信(当

    详解Linux 服务管理两种方式service和systemctl

    # service命令启动redis脚本 service redis start # 直接启动redis脚本 /etc/init.d/redis start # 开机自启动 update-rc.d redis defaults 其中脚本需要我们自己编写 2.systemctl命令 systemd是Linux系统最新的...

    Android跨应用启动实例详解

    一、在开始之前,先来梳理一下跨应用启动的2种方式: 第一种:在Activity中,启动另一个app的组件。 第二种:在Service中,启动另一个app的组件。 从所周知,Android中有四大组件,那么为什么小编,只介绍Activity...

    Android service学习demo

    Service学习资料,包含Service的定义使用,两种启动方式。有两个demo,里面有介绍service基础知识,自定义Binder,如果与Activity通信。详情也可参考:http://blog.csdn.net/u012764110/article/details/48491567

Global site tag (gtag.js) - Google Analytics