`
- 浏览:
542932 次
- 性别:
- 来自:
北京
-
开始一个Service
你可以从一个activity或从其它应用的组件通过传递一个Intent(指定了要启动的服务)给startService()启动一个服务.Android系统然后调用service的onStartCommand()方法并且把Intent传递给它.(你永远不能直接调用onStartCommand().)
例如,一个activity可以在调用startService()时使用一个明确的intent开始前文的例子中的service(HelloSevice):
Intentintent = new Intent(this, HelloService.class);
startService(intent);
startService()方法会立即返回然后Android系统调用service的onStartCommand()方法.但是如果service尚没有运行,系统会先调用onCreate(),然后调用onStartCommand().
如果service没有提供绑定功能,传给startService()的intent是应用组件与service之间唯一的通讯方式.然而,如果你希望service回发一个结果,那么启动这个service的客户端可以创建一个用于广播(使用getBroadcast())的PendingIntent然后放在intent中传给service,service然后就可以使用广播来回送结果.
不同的启动请求导致对service的onStartCommand()的不同调用,但停止service的请求只有一个(使用stopSelf()或stopService()).
停止一个service
一个"启动的"service必须管理其自己的生命期.这表示,系统不会停止或销毁这种service,除非内存不够用了并且service在onStartCommand()返回后会继续运行.所以,service必须调用stopSelf()停止自己或由另一个组件调用stopService()来停止它.
一旦通过stopSelf()或stopService()发出了停止请求,系统就会尽可能快地销毁service.
然而,如果你的service同时处理多个对onStartCommand()的请求,那么你不应在处理完一个请求之后就停止service,因为你可能已经又收到了新的启动请求(在第个完成后停止将会结束掉第二个).要避免这个问题,你可以使用stopSelf(int)来保证你的停止请求对应于你最近的开始请求.也就是,当你调用stopSelf(int)时,你传递开始请求的ID(传递给onStartCommand()的startId)给service,如果service在你调用stopSelf(int)之前收到一了个新的开始请求,发现ID不同,于是service将不会停止.
注意:你的应用在完成工作后停止它所有的service是非常重要的.这可以避免浪费系统资源和消耗电量.如果需要,其它的组件可以调用stopService()停止service.即使你为service启用了绑定,你也必须自己停止service,甚至它收到了对onStartCommand()的调用也这样.
创建一个绑定的Service
一个绑定的service是允许应用的组件通过调用bindService()来绑定它以创建一个能长期存在的连接(并且一般不允许组件调用startService()来启动它).
当你的activity或其它组件想与service交互或你的应用想基于IPC的向其它应用提供功能时,你应该创建一个绑定的service.
要创建一个绑定的service,你必须实现回调方法onBind(),还要在其中返回一个IBinder,这个IBinder定义了与service通讯的接口.其它应用组件就可以在之后调用bindService()来接收这个接口并开始调用service的方法.service只在有应用组件绑定到它时才活着,所以当没有组件绑定到它时,系统就会宰了它(你不需去停止一个绑定的service,跟用onStartCommand()启动的service不一样).
要创建一个绑定的service,首先要做的就是定义客户端如何与service通讯的接口.这个接口必须是IBinder的一个实现,并且必须被回调方法onBind()返回.一旦客户端接收到IBinder,它就可以开始与service进行交互.
多个客户端可以一起绑定到一个service.当一个客户端完成与service的交互,它调用unbindService()来解除绑定.一旦不再有任何客户端绑定到service,系统就宰了这个service.
有很多方法来实现一个绑定的service并且这些实现要比"开始的"service难懂得多.
发送通知给用户
一旦开始运行,一个service可以通过Toast通知或状态栏通来通知用户一些事件.
一个toast通知是一个出现在当前窗口表面上并过一会就消失的消息.当一个状态栏通知提供一个带有消息的图标到状态栏,用就可以先定它来执行一些动作(比如启动一个activity).
通常,一个状态栏通知是当一些后台工作(比如一个文件下载完成了)完成后通知用户可以对它进行动作的最佳方式.当用户选择这个通知时,它可以开始一个activity(比如可以查看下载的文件).
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
当我们使用startService()启动Service时,要停止Service,应调用stopService()方法,传入Service的Intent。在Service的onStartCommand()方法中,系统会返回START_STICKY、START_NOT_STICKY或START_REDELIVER_INTENT...
Activity也可以通过PendingIntent与Service进行间接交互,例如启动或停止Service。 总结,"安卓service学习"涵盖了Service的基本概念、启动方式、生命周期管理、前台Service、IntentService以及Service与Activity的...
- **及时停止Service**:完成任务后,记得调用`stopSelf()`或`stopService()`停止Service。 9. **Kotlin协程与Service** - **异步处理**:利用Kotlin的协程可以更优雅地处理Service中的异步任务,避免回调地狱,...
- 如果Service仅需在用户界面活动时运行,考虑使用IntentService,它会在任务完成后自动停止。 - 使用JobScheduler或WorkManager(对于Android O及以上版本)来调度后台任务,以更有效地利用系统资源。 - 考虑...
"安卓Service学习小程序"是一个专为开发者设计的示例项目,旨在帮助理解如何在Android应用中有效地使用Service组件。这个项目涵盖了Service的两种启动方式,这将是我们深入探讨的关键知识点。 1. **显式启动Service...
本案例“android音乐播放器service学习案例”着重讲解如何利用Service来实现一个音乐播放器,使音乐能够在后台持续播放。 首先,我们需要了解Android Service的基础知识。Service分为两种类型:标准服务...
startService()启动的服务会在任务完成后自动停止,而bindService()启动的服务则需要通过unbindService()来手动解除绑定并停止服务。 在"android中service组件自我学习练习"中,我们可能涉及到以下几个关键知识点:...
在Android开发中,...以上就是关于Service和BroadcastReceiver的基础知识,学习并熟练掌握这两个组件的使用,对于Android开发者来说至关重要。通过实践和不断探索,你可以更好地理解和利用它们来实现复杂的功能。
在后续的《androidservice学习(下)》中,将探讨通过AIDL实现Service的远程调用,进一步扩展Service的功能性和灵活性,实现跨进程通信。这一部分将深入讲解AIDL的基本概念、配置过程及其实现细节,为开发者提供更全面...
学习这个实例,开发者可以理解Service的运作机制,如何在实际项目中应用Service,以及如何处理Service与Activity之间的通信。这对于构建高效、稳定的Android应用至关重要,特别是对于那些需要在后台持续运行的任务。...
本资料包包括三个部分:15.Service学习(1).rar、16.Service学习(2).rar和17.Service学习(3).rar,分别深入讲解了Service的基本概念、启动方式以及实际应用。 首先,我们来了解一下Service的基本概念。Service是...
在"Android学习之Service练习"中,我们将深入探讨如何创建、启动和绑定到`Service`,以及`Service`在实际应用中的常见用途。 1. **什么是Service?** `Service` 是Android四大组件之一,用于执行长时间运行的操作...
"Service初级学习材料"包含的课件和代码旨在帮助初学者理解如何创建和管理Service实例。在这个学习资源中,你将深入了解到Service的基本概念、生命周期以及如何在实际应用中使用Service。 Service生命周期: 1. **...
Service基础学习笔记 在Android应用开发中,Service是四大组件之一,它负责在后台执行长时间运行的操作,即使用户界面关闭,Service仍可继续运行。Service主要用于处理那些不需要用户交互但需要长时间运行的任务,...
在《android service 学习笔记(下)》中,会介绍如何通过AIDL(Android Interface Definition Language)实现对Service的远程调用,这允许不同进程间的组件通信,增强了Service的功能和使用范围。 总结来说,...
本资料“Android应用源码之16.Service学习(2).zip”提供了关于Service的深入学习资源,通过源码分析,我们可以更深入地理解Service的工作原理和使用方式。 Service的生命周期: 1. 创建:当通过startService()或...
本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service有两种启动模式:startService()和bindService()。`startService()`主要用于启动一个无需与调用者...
提到的"Exercise"可能是练习文件或者代码示例,通常在学习Service时,开发者会创建一个简单的Service项目,模拟启动Service,然后在另一个Activity中控制Service的启动和停止,或者绑定和解绑,以加深理解。...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。...在`ServiceDemo`项目中,我们可以看到如何创建和使用Start Service的实例,进一步学习和实践这些概念。
在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,...通过学习和实践,你将能够更好地掌握Android Service的管理和控制,提高你的应用质量。