Service相关

Service一直在后台运行,没有用户界面,所以绝不会到前台来。如果某个程序组件要在运行时间向用户呈现某种界面,或该程序需要与用户交互,就需要使用Activity,否则就应该考虑使用Service。

Service和Activity一样,有自己的生命周期。

开发Service只需要两个步骤:

1>定义一个继承Service的子类

2>在AndroidManifest.xml文件中配置该Service,配置Service使用<service.../>元素,配置Service时也可为<service.../>元素配置<intent-filter.../>子元素,用于说明该Service可被哪些Intent启动

Service系列生命周期方法:

IBinder onBind(Intent intent):该方法是Service子类必须实现的方法。该方法返回一个有效的IBinder对象,应用程序可通过该对象与Service组件通信

Void onCreate():当该Service第一次被创建后将立即回调该方法

Void onDestroy():当该Service被关闭之前将会回调该方法

Void onStartCommand(Intent intent,int flags,int startId):每次客户端调用startService(Intent intent)方法启动该Service时都会回调该方法

Boolean onUnbind(Intent intent):当该Service上绑定的所有客户端都断开连接时将会回调该方法

Android系统中运行Service有如下两种方式:

1>通过Context的startService()方法:通过该方法启用Service,访问者与Service之间没有关联,Service和访问者之间无法进行通信、数据交换。即使访问者退出了,Service仍然运行。

2>通过Context的bindService()方法:使用该方法启用Service,访问者与Service绑定在了一起,访问者一旦退出,Service也就终止。bindService()方法的完整方法签名为:bindService(Intent service,ServiceConnection conn,int flags),该方法的三个参数:

Service:该参数通过Intent指定要启动的Service

Conn:该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接情况。当访问者与Service之间连接成功时将回调ServiceConnection对象的onServiceConnected(ComponentName name,IBinder service)方法;当Service所在的宿主进程由于异常中止或其他原因终止,导致该Service与访问者之间断开连接时回调该ServiceConnection对象的onServiceDisconnected(ComponentName name)方法。但如果当调用者主动通过unBindService()方法断开与Service的连接时,ServiceConnection对象的onServiceDisconnected(ComponentName name)方法并不会被调用。

Flags:指定绑定时是否自动创建Service(如果Service还未创建)。该参数可指定为0(不自动创建)或BIND_AUTO_CREATE(自动创建)。

Service生命周期还有一种特殊情形,如果Service已由某客户端通过startService()方法启动了,接下来其他客户端再调用bindService()方法来绑定该Service后,再调用unbindService()方法解除绑定,最后又调用了bindService()方法再次绑定Service,这时系统只是把Service内部IBinder对象传给Activity,并不会把该Service生命周期完全“绑定”到该Activity,因而当Activity调用unBindService()方法取消与该Service的绑定时,也只是切断该Activity与Service之间的关联,并不能停止该Service组件,更不会回调onDestroy()方法。这个过程所触发的生命周期如右:onCreate()→onStartCommand()→onBind()→onUnbind()[重写该方法时返回了true]→onRebind()。如果希望onRebind()方法被回调,除了需要该Service是由Activity的startService()方法启动之外,还需要Service子类重写onUnbind()方法时返回true

时间: 2024-08-02 11:01:25

Service相关的相关文章

java面试题全集(中)--Java Web和Web Service相关面试题

这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程

Web Service相关规范

Web Service概述 Web Service是一个平台独立的.低耦合的.自包含的.基于可编程的Web应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. 在Web Service的体系架构中有三个角色:服务提供者(Service Provider),也叫服务生产者:服务请求者(Service Requester),也叫服务消费者:服务注册中心(Service Register),也叫服务代理,服务提供

WCF RIA SERVICE相关技术

WCF RIA SERVICE实体属性拷贝 private void DoSubmit() { ((IEditableObject)this.RepairContract).EndEdit(); var domainContext = new DmsDomainContext(); var newRepairContract = new RepairContract(); domainContext.RepairContracts.Add(newRepairContract); newRepai

kubernetes 学习 service相关

1:         service有什么用? 直接通过Pod的IP地址和端口号可以访问容器应用,但是pod的IP地址是不可靠的,比如POD出现故障后,有可能在另外一个NOde上启动,这样Pod的IP地址就发生变化. 另外,如果容器本事是分布式的部署方式,通过多个实例一起提供服务,那么需要一个负载均衡器. k8s的service就是解决以上问题的.     关键配置: clusterIP:  给servcie分配一个虚拟IP. NodeIP:    让service和Node拥有同样的IP. 2

Android Service完全解析,关于服务你所需知道的一切(下) (转载)

转自:http://blog.csdn.net/guolin_blog/article/details/9797169 转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在 上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式. Service与Thread的关系.以及如何创建前台Service.以上

Android Service完全解析,关于服务你所需知道的一切(下)

转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法.Service和Activity进行通信.Service的销毁方式.Service与Thread的关系.以及如何创建前台Service.以上所提到的这些知识点,基本上涵盖了大部分日常开发工作当中可能使用到的Service技术.不过关于Service其实还有一个更加

Job Service代码重构遐想

最近有大概半个月的时间可以重构下代码,刚好可以重新整理下Job Service相关的代码.前段时间由于忙于完成Job Service所有功能以及完成对Auto Job的支持以正常上线,使得有些地方的代码写得不是特别优雅.主要集中在以下一些地方: DAG状态的转移 目前DAG状态分为3层,分别为ApplicationStatus.TaskStatus.InstanceStatus.每个层次都有以下几种状态,Waiting.Running.Finished.Stopped.Failed.并且DAG有

summit SMT中dispatch service无法启动的问题

[问题描述] 在环境维护的过程中,发现SMT中dispatch service启动后就停止的情况,查看日志,发现errorlog为空 [解决方法] 删除client tree下etc/stpcfg目录中的dispatch service相关的配置文件,这样的话dispatch service启动的时候就会去找summit核心的配置文件, 这样如果服务可以正常启动的话,说明是dispatch service客制化导致的错误,要从客制化过的配置文件开始排查错误.

Android相关博文整理汇总

Handler相关博文: Android中Handler的使用 深入源码解析Android中的Handler,Message,MessageQueue,Looper Android新线程中更新主线程UI中的View方法汇总 Android中HandlerThread的使用及原理解析 Android中Looper的quit方法和quitSafely方法 Service相关博文: Android中Service概述 Android中startService的使用及Service生命周期 未完,待续-