1.5.41 Android Service生命周期 绑定类型服务 Binder类

2024-08-21 20:32

本文主要是介绍1.5.41 Android Service生命周期 绑定类型服务 Binder类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。

一、服务的生命周期---从创建到销毁---可以被分为以下两个路径:

1.  启动类型的服务(A started service):

开启的service要通过其他组件调用startService()方法创建服务。

然后服务无限期的运行,并且必须通过调用stopSelf()方法来终止自己或者其他组件通过调用stopService()方法来终止这个服务。

当服务被终止,系统就会把它销毁。

2.  绑定类型的服务(A bound service):

绑定一个服务器,其他组件(客户端)要调用bindService()方法创建服务。

客户端通过IBinder接口与服务通信。

客户端能够调用unbindService()方法来关闭与服务连接。

多个客户端能够绑定到统一个服务,并且当所有的都解绑以后,系统就会销毁这个service。(服务不需要终止自己)

这两个路径不是完全独立的。

也就是说,你能够绑定一个已经用startService()方法启动的服务。

例如,一个后台的音乐服务能够调用带有标识要播放的音乐的Itent的startService()方法来启动,稍后,可能在用户想要进行一些播放器的控制时,或想要获取有关当前歌曲信息,那么一个Activity就能够调用bindService()方法来绑定这个服务。在这个场景中,直到所有的客户端解绑,stopService()或stopSelf()方法才能实际终止这个服务。

实现生命周期的回调方法(Implementing the lifecycle callbacks) 

像Activity一样,服务也有生命周期回调方法,你实现这些回调方法来监视服务内状态的改变,在合适的时机执行工作。下面的服务框架演示了每个生命周期的回调方法:

 

public class ExampleService extends Service {int mStartMode;       // indicates how to behave if the service is killedIBinder mBinder;      // interface for clients that bindboolean mAllowRebind; // indicates whether onRebind should be used@Overridepublic void onCreate() {// The service is being created}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// The service is starting, due to a call to startService()return mStartMode;}@Overridepublic IBinder onBind(Intent intent) {// A client is binding to the service with bindService()return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {// All clients have unbound with unbindService()return mAllowRebind;}@Overridepublic void onRebind(Intent intent) {// A client is binding to the service with bindService(),// after onUnbind() has already been called}@Overridepublic void onDestroy() {// The service is no longer used and is being destroyed}
}  

 

注意:跟Activity生命周期的回调方法不同,你不需要调用这些回调方法的父类的实现/基类的实现 。

 

以上转载:http://blog.csdn.net/think_soft/article/details/7299443 

二、通过实现这些回调方法,你能够监视服务生命周期的两个嵌套循环:

1.  The entire lifetime

service整体的生命周期是从onCreate()被调用开始,到onDestroy()方法返回为止。

发生在onCreate()和onDestroy()方法调用之间的服务整体生命周期,跟Activity一样,服务在onCreate()方法完成初始化安装,在onDestroy()方法中释放所有的保留资源。

例如,一个音乐回放的服务能够在onCreate()方法中播放音乐的地方创建一个线程,然后在onDestroy()方法中终止这个线程。

所有的服务都会调用OnCreate()和onDestroy()方法,不管是startService()方法还是bindService()方法创建的服务。

2. The active lifetime

service积极活动生命周期(active lifetime)是从onStartCommand() 或onBind()被调用开始 ,每个方法都分别处理传递给startService()或bindService()方法的Intent。

onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。
这个时候把调用者(Context,例如Activity)和Service绑定在一起,Context退出了,
Srevice就会调用onUnbind->onDestroy相应退出。 

如果是启动类型的服务,它的积极活动生命周期和整体生命周期一同结束(服务一直存活到onStartCommand()方法返回之后)。

如果是绑定类型的服务,那么积极活动生命周期在onUnbind()方法返回时结束。

注意:尽管启动类型的服务通过调用stopSelf()或stopService()方法来终止服务,但是有的服务没有对应回调方法(如没有onStop()回调方法)。因此,除非服务被绑定到了客户端,否则在服务被终止时(只在接受onDestroy()回调方法的时候)系统就会销毁它。

图2说明了一个服务的典型回调方法。尽管这个图把由startService()方法创建的服务与由bindService()方法创建的服务给分开了,但是请记住,任何服务,不管它是怎样启动的,都可能允许客户绑定它。因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

3.Managing the Lifecycle of a Bound Service

当绑定service和所有客户端解除绑定之后,Android系统将会销毁它,(除非它同时被onStartCommand()方法开启)。

因此,如果你的service是一个纯粹的绑定service,那么你不需要管理它的生命周期。

然而,如果你选择实现onStartCommand()回调方法,那么你必须显式地停止service,因为service此时被看做是开启的。

这种情况下,service会一直运行到它自己调用 stopSelf()或另一个组件调用stopService(),不论它是否和客户端绑定。

另外,如果你的service被开启并且接受绑定,那么当系统调用你的 onUnbind()方法时,如果你想要在下次客户端绑定的时候接受一个onRebind()的调用(而不是调用 onBind()),你可以选择在 onUnbind()中返回true。

onRebind()的返回值为void,但是客户端仍然在它的 onServiceConnected()回调方法中得到 IBinder 对象。

  下图展示了这种service(被开启,还允许绑定)的生命周期:

 

 

以上转载:http://www.cnblogs.com/mengdd/archive/2013/03/24/2979944.html

三、Android 绑定类型服务器---继承Binder类

如果你只在应用程序的局部使用服务,并且不需要跨进程工作,那么你能够实现自己的Binder类,用它直接给你的客户端提供访问服务中公共方法的能力。注意:通常,客户端和服务端只是在同一个应用和进程中工作,例如,对于一个要良好工作的播放音乐的应用程序,就需要把在后台工作的播放音乐的服务与应用自己的一个Activity绑定。

以下是建立绑定类型服务的步骤:

1. 在服务中,使用以下方法之一创建Binder实例:

   A. 包含客户端能够调用的公共方法;

   B. 返回当前服务的实例,它有客户端能够调用的公共方法;

   C. 或者返回一个带有客户端能够调用的公共方法的被服务持有的另一个类。

2.  从onBind()回调方法中返回这个Binder对象的实例;

3.  在客户端,在onServiceConnected()回调方法中接收Binder对象,并且使用这个对象提供的方法来调用被绑定的服务。

 

以上转载:http://blog.csdn.net/think_soft/article/details/7303479#comments

这篇关于1.5.41 Android Service生命周期 绑定类型服务 Binder类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094206

相关文章

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python