`

Android之service理论

 
阅读更多

一:什么是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生命周期

onCreate() 创建Service
onStart(Intent intent, int startId) 启动Service
onDestroy() 销毁Service
onBind() 返回一个IBinder接口对象给Service

    startService后,即使调用startService的进程结束了,Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())。bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,当然期间也可以调用unbindservice让 Service结束。

    两种方式混合使用时,如果先是绑定(bind)了,那么启动(start)的时候就直接运行Service的onStrat方法,如果先是启动(start),那么绑定(bind)的时候就直接运行onBind的方法。如果你先绑定(bind)上了,就暂停(stop)不掉了,也就是stopService不能用了,只能先UnbindService,再StopService.所以是先启动(start)还是先绑定(bind)行为时由区别的。比如说你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在一个生命周期中只能被调用一次。

四:启动和停止Service
    ①启动:startService(Intent intent)来启动Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onStart()方法。
    ②停止:stopService(Intent intent)来停止Service,这时Service会调用自身的onDestory()方法。

五:绑定Service
    调用bindService(Intent service, ServiceConnection conn, int flags)来绑定一个Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onBind()方法返回客户端一个IBinder接口对象。(注意:如果返回null,ServiceConnection对象的方法将不会被调用)
    参数①service:Intent对象 。
    参数②conn:ServiceConnection对象,实现其onServiceConnected()和onServiceDisconnected()在连接成功和断开连接时处理。
    参数③flags:Service创建的方式,一般用Service.BIND_AUTO_CREATE表示绑定时自动创建。

分享到:
评论

相关推荐

    程序结构设计理论(Android版)_20191108.zip

    本文包含一个109页的PPT讲述Android程序结构设计的理论和方法,附带一个项目案例ProgramStructureGPS.20190922.zip; 其中的内容有: Android app的界面的树结构与对界面的访问; Activity和Activity通信的方法 ...

    android backup service

    Backup ManagerService 框架主要目的是为了支持备份和恢复app data,settings等数据到云端,理论支持所有app,在用户更换新手机时可以无缝恢复之前的数据,更方便用户使用。如何避免访问app数据遇到权限问题可以参考...

    android手机通讯录的毕业论文

    2 Android技术与理论 4 2.1 Android系统开发简介 4 2.1.1 Android技术简介 4 2.1.2 关键应用程序 7 2.1.3 应用程序框架 7 2.1.4 函数库 7 2.1.5 Linux内核 7 2.2 Android应用的构成和工作机制 7 2.2.1 Activity 7 ...

    Android应用开发详解pdf.pdf

    该款手机为中国台湾宏达电代工制造,是世界上第一部使用Android操作系统的手机,它支持WCDMA/HSPA网络,理论下载速率为7.2Mbps,并支持Wi-Fi。到了2010年1月,Google开始发布自家品牌手机Nexus One。该款手机使用的...

    Android开发权威指南 第二版

    , 《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、...

    Android高级编程--源代码

    通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。  主要内容  ◆android移动开发的最佳实践  ◆简要介绍...

    android手机通讯录的设计与实现论文

    2 Android技术与理论 4 2.1 Android系统开发简介 4 2.1.1 Android技术简介 4 2.1.2 关键应用程序 7 2.1.3 应用程序框架 7 2.1.4 函数库 7 2.1.5 Linux内核 7 2.2 Android应用的构成和工作机制 7 2.2.1 Activity 7 ...

    《Android高级编程》

    通过学习,您可以打下牢固的理论根基,了解使用当前Android 1.0 SDK编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。 Android提供一个开放的开发环境,为针对移动设备编写创新...

    Android开发权威指南

    , 《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术,主要内容包括Android的四大应用程序组件(Activity、Service、Content Provider和Broadcast Receiver)、布局、菜单、控件、资源和本地化、...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    本书是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。本书从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层...

    android开发艺术探索高清完整版PDF

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    Google.Android开发入门与实战

    内容简介  《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、... 最后,祝广大开发者的技术日益精进,早日开始Android开发之旅,赶上移动互联网的第一班车,共赢中国3G未来!

    Android开发艺术探索

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    android实习报告(1).doc

    实习报告 实习目的: 生产实习是计算机科学与技术专业重要的实践性教学活动,其目的是使学生们进一步 加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能 ,学习有关计算机最新技术方面...

    移动安全系列教学下载共43份.zip

    Android安全开发基础--3--四大组件之服务 (Service).pdf Android安全开发基础--4--四大组件之广播(Broadcast Receiver).pdf Android安全开发基础--5--四大组件之内容提供器(Content Provider).pdf Android安全...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器(Content Provider) Android安全开发基础: 进程间通信...

    AndroidWidgetTools:个人android小部件工具应用程序

    从理论上讲,所有小部件也都支持android 3.x,但我没有在android 3.x中对其进行测试 无线ADB小部件 这是android studio中的重新编码版本 此小部件将打开用于局域网工作的远程adb服务。 仅支持wifi。 设置service....

    Android项目源码仿微信登录注册聊天换肤二维码扫描.zip

    本项目是一个基于安卓的Android仿微信客户端-猫友。是一个csdn上的朋友的原创项目,原帖可以看这里http://blog.csdn.net/ericfantastic/article/details/49451249 实现了微信的登录注册、主界面、聊天会话、通讯录、...

    Android GPRS的基本应用

    GPRS(General Packet Radio Service)称为通用分组无线服务技术,是GSM移动电话用户可用的一种移动数据业务。它经常被描述成2.5G,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS是GSM的延续。...

    安卓技术之透解

    本书深入阐述了Android应用开发的Activity、Service、BroadcastReceiver与ContentProvider四大组件,并详细介绍了Android全部图形界面组件的功能和用法,Android各种资源的管理与用法,Android图形、图像处理,事件...

Global site tag (gtag.js) - Google Analytics