一 什么是Service
服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,这取决于自身的需要。其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。例如媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐依然可以继续播放,这时就是由服务 (service)来保证当用户界面关闭时音乐继续播放的。
它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用, Context.startService() 和Context.bindService()。
两种启动Service的方式有所不同。这里要说明一下的是如果你在Service的onCreate或者onStart做一些很耗时间的事情,最好在Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情。
什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等。
二 如何使用Service
1.第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service。
2.第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service。
二者可以混合使用,比如说我可以先startService再bindservice。
三 service生命周期
startService后,即使调用startService的进程结束了,Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())。bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,当然期间也可以调用unbindservice让 Service结束。
两种方式混合使用时,比如说你startService了,我bindService了,那么只有你stopService了而且也unbindservice了,这个Service才会被结束。
Android系统将会尝试保留那些启动了的或者是绑定了服务的进程。如果该服务正在进程的onCreate(), onStart(), 或者 onDestroy() 这些方法中执行时, 那么主进程将会成为一个前台进程,以确保此代码不会被停止。如果服务已经开始,那么它的主进程会就重要性而言低于所有可见的进程但高于不可见的进程, 由于只有少数几个进程是用户可见的,所以只要不是内存特别低,该服务不会停止.。如果有多个客户端绑定了服务, 只要客户端中的一个对于用户是可见的,即认为该服务可见。
如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。
所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy
使用context.bindService()启动Service会经历:
context.bindService()->onCreate()->onBind()->Service running
onUnbind() -> onDestroy() ->Service stop
onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。
所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
所以,在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
分享到:
相关推荐
在Android应用开发中,Service和Timer是两个非常重要的组件,它们可以帮助我们实现后台服务和定时任务的管理。本文将深入探讨如何使用Service和Timer来执行周期性的任务。 Service是Android系统中的一个关键组件,...
6. **开发者工具**:SDK Platforms还包括用于开发和调试的应用,如Android Studio、ADT(Android Developer Tools)、DDMS(Dalvik Debug Monitor Service)等。这些工具帮助开发者高效地编写、测试和优化代码,确保...
6. **开发者工具**:SDK还包含了许多辅助开发工具,如DDMS (Dalvik Debug Monitor Service)、Hprof转换工具、Traceview性能分析工具等,帮助开发者调试和优化应用性能。 7. **支持库**:除了核心平台外,SDK还提供...
此外,DDMS(Dalvik Debug Monitor Service)是调试Android应用的重要工具,可以查看内存、CPU使用情况,跟踪和分析性能问题。 6. 构建工具: Android Build Tools是构建过程的关键部分,包括aapt(Android Asset ...
此外,理解Android的组件模型,如活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider),是构建功能完整应用的基础。 总之,"android-sdk_r24.4.1-windows.zip...
在Android平台上,与远程服务进行交互是开发过程中常见的需求,其中一种常见的技术就是通过Web Service。Web Service是一种基于网络的、分布式的应用程序组件,能够使不同的系统之间进行数据交换。在Android中,...
6. **调试工具**:包括Dalvik Debug Monitor Service (DDMS) 和Android Profiler,用于性能分析和问题排查。 7. **测试框架**:支持单元测试、UI测试和持续集成。 8. **插件支持**:允许扩展其功能,例如添加新的...
- **DDMS(Dalvik Debug Monitor Service)**:提供内存分析、线程监控和性能追踪等调试工具。 - **Android Studio**:自Android Lollipop版本起,Google推荐使用的新一代集成开发环境,取代了Eclipse+ADT。 4. *...
安卓发送Exchange邮件,引用ews-android-api.jar和joda-time-2.8.jar两个包。 用法: ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); ExchangeCredentials credentials = new ...
1. `app`目录:这是Android应用的主要代码库,包含Activity、Service、BroadcastReceiver等核心组件。 2. `libs`目录:存放了项目所需的第三方库,如蓝牙通信库、固件升级库等。 3. `res`目录:包含了应用的资源文件...
在Android系统中,Service是一种非常重要的组件,它用于在后台执行长时间运行的操作,即使用户离开了应用程序,Service仍能持续运行。本教程将深入探讨“android--service实例”,讲解如何创建、启动、绑定以及管理...
3. 调试工具:如DDMS(Dalvik Debug Monitor Service)和Logcat,用于监控应用性能、调试内存泄漏等问题。 4. AVD Manager:Android虚拟设备(AVD)管理器,允许创建和管理虚拟设备,进行应用的多设备兼容性测试。 5...
Android-android-upload-service.zip,在后台轻松上载文件(ftp/multipart/binary),并提供进度指示通知,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,...
本文将基于提供的"Android auto-update-service-develop"源码Demo,深入剖析自动更新服务的实现机制,为学习者提供详尽的指导。 首先,自动更新服务通常基于Google的Play服务框架,利用Google Play Store的更新机制...
// 如果调用的是.NET Web Service,设为true envelope.setOutputSoapObject(request); ``` 4. **设置HTTP传输**:使用HttpTransportSE对象设置URL并发送请求。 ```java HttpTransportSE androidHttpTransport =...
2. **SDK Tools**:一套用于开发、调试和测试Android应用的命令行工具,如`adb`(Android Debug Bridge)、`ddms`(Dalvik Debug Monitor Service)等。 3. **Android模拟器**:开发者可以使用AVD(Android Virtual...
- **Service和BroadcastReceiver**:实现后台服务,用于持续监听蓝牙状态变化和数据传输。 - **Model和Adapter**:数据模型和适配器,负责数据的存储和UI显示的同步。 - **Utils**:辅助工具类,包含各种通用函数...
本篇将深入探讨“android-location-service-源码.rar”中涉及的关键技术和流程。 一、Android定位服务概述 Android定位服务主要由LocationManager服务和多种定位提供者构成,包括GPS(全球定位系统)、网络定位...
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包。此jar包用于android和webservice进行通信,目前版本3.6.2
通过Eclipse的DDMS(Dalvik Debug Monitor Service)进行调试。 2. **Android Studio集成**: 虽然r21版本不直接捆绑Android Studio,但可以将其作为独立IDE来使用。导入SDK后,Android Studio将自动检测并提供相关...