Service概念及用途:
A service is an application component that can perform long-running operations in the background and does not provide a user interface。
通常service用来执行一些耗时操作,或者后台执行不提供用户交互界面的操作,例如:下载、播放音乐。
Service生命周期 :
Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法,具体的可以看下面的实例。
Service与Activity通信:
Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL)这一节我不作过多描述,当我们想获取启动的Service实例时,我们可以用到bindService和onBindService方法,它们分别执行了Service中IBinder()和onUnbind()方法。
这里要提及一点:继承service的子类在重写service的方法中,除了一个onStart()方法之外,还有一个onStartCommand()方法,有关onStartCommand()方法稍微作点介绍:
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用。
从Android官方文档中,我们知道onStartCommand有4种返回值:
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统将会把它置为started状态,系统不会自动重启该服务,直到startService(Intent intent)方法再次被调用;。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。
有了 Service 类我们如何启动他呢,有两种方法:
• Context.startService()
• Context.bindService()
1. 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
区别概况为:
startService() 的调用者与服务没有联系,即使调用者退出了,服务仍然运行,而bindService() 的调用者与服务绑在一起,调用者一旦退出了,服务也随即终止掉。
分享到:
相关推荐
通常,Service启动Activity是通过发送意图(Intent)来实现的。 **一、Service启动Activity的基本流程** 1. **创建Intent**: 首先,你需要在Service中创建一个Intent对象,指定要启动的Activity类名。例如: ```...
本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service有两种启动模式:startService()和bindService()。`startService()`主要用于启动一个无需与调用者...
在Android应用开发中,理解Service的启动与停止机制对于创建高效、稳定的后台服务至关重要。 一、Service概述 Service是在Android应用程序中用于实现无界面、长时间运行任务的组件。它可以在用户界面关闭或者应用...
start service 启动不了解决方案
Linux中jar使用service启动脚本
Network List Service 不能启动解决方案 Network List Service 是Windows操作系统中的一个重要组件,负责管理网络连接和网络配置。然而,有时Network List Service可能无法启动,导致网络连接图标上出现小红叉,并...
知识点:广播必须在activity或者service启动之后才能发挥作用。个人看来是因为开启activity或者service时, AndroidManifest.xml里面的注册的广播或者在Activity、service动态注册的广播接收器才能被开启,这样才能...
在该类中,重写`onStartCommand()`方法,这是Service启动时调用的方法。在这个方法里,我们可以初始化下载操作的相关逻辑。 ```java public class DownloadService extends Service { // ... @Override public ...
本文将深入探讨“映月播放器”这个简单的安卓音乐播放器DEMO,它利用startService启动模式来实现核心的播放功能。 一、startService启动模式 在安卓系统中,Service是一种在后台运行且与用户界面无关的组件。start...
Service启动时会调用`onStartCommand()`方法,你可以在这个方法中执行后台任务。返回值可以是START_STICKY、START_NOT_STICKY或START_REDELIVER_INTENT,它们会影响Service被系统杀死后的行为。 3.2. onBind() ...
C# 开机启动服务(windows service) 本程序用ASP.NET C#开发,不针对系统版本限制。 本源码拿就来可以直接写您想要的服务,无需再改其它的代码,拿来主义是不是很好?例如订单服务。 本服务是100%源码,源码中包含: ...
"Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...
在Service启动成功后,我们可以发送另一个广播或直接在Service中启动Activity。假设我们有一个名为ResultActivity的Activity,用于显示服务启动成功的信息。 ```java // 在StartupService的onStartCommand()或...
tengine以service方式进行启动,默认安装。直接make&& make install后默认路径启动安装,如果路径有变动,请自行修改
这个方法会创建并启动Service,一旦Service启动,它将在后台持续运行,直到你显式地调用`stopService()`。下面是一个简单的`startService()`示例: ```java Intent intent = new Intent(this, MyService.class); ...
当Service启动时,发送一个自定义广播,Service接收并设置运行标志;当Service停止时,清除该标志。这样,即使有多个启动请求,也只有第一个能真正启动Service。 ```java // 在Service中 @Override public void ...
本教程将深入探讨Service的生命周期及其启动方式,并结合一个求平均值的Demo进行讲解。 首先,我们来理解Service的生命周期。Service有四个主要状态:创建(Created)、启动(Started)、绑定(Bound)和销毁...
启动状态是通过startService方法启动的Service,即使没有其他组件绑定,Service也会继续运行。绑定状态是通过bindService方法,只有当有其他组件绑定到Service时,Service才会运行。两者可以同时存在,即Service既...
总结起来,解决docker.service启动失败Unit not found的问题,关键是要确保所有依赖的服务文件存在并且配置正确,且服务之间依赖关系符合预期。在升级Docker版本或进行系统配置更改时,要特别注意这些问题,以避免...
Minio 解决国产服务器rpm安装后,无法启动、自启、修改service文件的问题