黑马程序员安卓教程:Service 的生命周期回调函数

合集下载

精品文档黑马程序员安卓教程:Activity的生命周期onCreate和onDestroy

精品文档黑马程序员安卓教程:Activity的生命周期onCreate和onDestroy

Activity生命周期之创建和销毁一个Activity通常是一个单独的屏幕即一个手机页面,Activity生命周期是指Activity从创建到销毁的过程。

在Activity的生命周期中必须会执行一些方法函数,这些方法就是生命周期的回调。

例如:人的生命周期就是其从出生到死亡的过程,在这个生命周期中必定会执行“出生函数“和“死亡函数”。

下面我们通过一个DEMO来理解Activity的生命周期。

1.新建工程【File】→【new】→【Android Application Project】命名为:06_activity生命周期2.生命周期的创建新建工程“06_activity生命周期”的主Activity中,重写了onCreate()方法,代码如例1-1所示:对图1-1所示由图1-1可知:onCreate方法在Activity启动时调用。

在这个方法中我们需要做一系列的初始化操作,例如调用setContentView方法加载该Activity UI的根视图,调用findViewById来查找相关控件等。

清空logcat,运行程序,此时logcat输出如图1-2所示信息:图1-2所示从图1-2可知:在创建Activity时onCreate方法被调用。

事实上,onCreate方法是Activity生命周期的开始。

毋庸置疑,有开始就会有结束。

那么,Activity生命周期的结束是什么概念呢?在其生命周期结束时会回调什么生命函数呢?3.生命周期的销毁Activity生命周期的结束即系统将释放该Activity所占用的内存资源,当一个Activity销毁时会调用onDestroy方法,代码如例1-2:图1-3所示从图1-3可知:当Activity销毁时会调用该方法来进行一些清理操作。

该方法会在以下两种情景下调用,第一:执行该Activity的finish方法;第二:系统自动临时销毁该Activity用来节约内存资源。

黑马程序员安卓教程:Activity生命周期之onStart和onStop

黑马程序员安卓教程:Activity生命周期之onStart和onStop

Activity生命周期之onStart和onStop在“Activity生命周期之创建和销毁”中我们讨论了Activity生命周期的onCreate和onDestroy,这两个函数分别对应了Android Activity生命周期的始和终。

在Android生命周期的过程中还有一些其他的过程,例如onStart和onStop。

下面我们将对这两个过程进行相关的介绍。

1.生命周期的开始新建工程“06_activity生命周期”的主Activity中,重写了onStart()方法,代码如例1-1所示:例1-1对图1-1所示从图1-1可知:该方法会在以下情况被调用,第一:当Activity调用了onCreate之后会执行该方法来展示Activity页面;第二:当Activity调用了OnRestart来启动一个被Stopped掉的但没有被destroyed掉的Activity时,该方法也会被调用来重新展示这个Activity页面。

清空logcat,运行程序,此时logcat打印如图1-2所示的信息:图1-2所示从图1-2可知:onCreate方法调用之后便会调用onStart方法。

事实上:onStart方法的调用代表这个Activity页面被显示屏幕上,用户是可见的。

当这个Activity页面不能被用户所见,此时又会调用什么方法呢?2.生命周期的停止停止状态(Stopped):Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,但它依然保持所有状态和成员信息,只是它不再可见,它的窗口被隐藏;在“06_activity生命周期”的主Activity中,重写了onStop()方法,代码如例1-2所示:例1-2图1-3所示此时,logcat打印信息过程图如下1-4:点击HOME键图1-4所示从图1-4可知:当在点击HOME按键时,系统返回到手机的主页面,此时运行的Activity并没有被destroy 掉,只是被隐藏,不可见而已。

黑马程序员安卓教程:Service 的生命周期

黑马程序员安卓教程:Service 的生命周期

Service 的生命周期关于Service的生命周期在Android官方文档中有非常详细的说明,甚至比如何一本书籍都要好,因此这里建议英文水平好的直接看官方文档。

自己在学习Service以及写关于Service的文章时其实大量参考了官方的文档,因为那才是最权威的学12习资料。

跟Activity一样,Service也是有生命周期的,不一样的是Service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径:标准开启模式和绑定模式。

The lifecycle of a service is much simpler than that of an activity. However, it's even more important that you pay close attention to how your service is created anddestroyed,because a service can run in the background without the user being aware.1.4.1 A started service(标准开启模式)被开启的service通过其他组件调用startService()被创建。

这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。

当service 被停止时,系统会销毁它。

The service is created when another component calls startService(). The service then runs indefinitely and must stop itself by calling stopSelf(). Another component can also stop the service by calling stopService(). When the service is stopped, the system destroys it..1.4.2 A bound service(绑定模式)被绑定的service是当其他组件(一个客户)调用bindService()来创建的。

Service生命周期

Service生命周期

Service⽣命周期与Activity类似,Service也有⾃⼰的⽣命周期函数,在不同的时刻,系统会调⽤对应的Service⽣命周期函数,不过与Activity声明周期相⽐,Service的声明周期更加简单,我们通过官⽅给出的⼀张图⽚来体会⼀下:这⾥我们总结⼀下:1). 被启动的服务的⽣命周期:如果⼀个Service被某个Activity 调⽤ Context.startService ⽅法启动,那么不管是否有Activity使⽤bindService 绑定或unbindService解除绑定到该Service,该Service都在后台运⾏。

如果⼀个Service被startService ⽅法多次启动,那么onCreate⽅法只会调⽤⼀次,onStart将会被调⽤多次(对应调⽤startService的次数),并且系统只会创建Service的⼀个实例(因此你应该知道只需要⼀次stopService调⽤)。

该Service将会⼀直在后台运⾏,⽽不管对应程序的Activity是否在运⾏,直到被调⽤stopService,或⾃⾝的stopSelf⽅法。

当然如果系统资源不⾜,android系统也可能结束服务。

2). 被绑定的服务的⽣命周期:如果⼀个Service被某个Activity 调⽤ Context.bindService ⽅法绑定启动,不管调⽤ bindService 调⽤⼏次,onCreate⽅法都只会调⽤⼀次,同时onStart⽅法始终不会被调⽤。

当连接建⽴之后,Service将会⼀直运⾏,除⾮调⽤Context.unbindService 断开连接或者之前调⽤bindService 的 Context 不存在了(如Activity被finish的时候),系统将会⾃动停⽌Service,对应onDestroy将被调⽤。

3). 被启动⼜被绑定的服务的⽣命周期:如果⼀个Service⼜被启动⼜被绑定,则该Service将会⼀直在后台运⾏。

AndroidService启动方式,生命周期和应用场景详解

AndroidService启动方式,生命周期和应用场景详解

AndroidService启动⽅式,⽣命周期和应⽤场景详解Android Service 启动⽅式,⽣命周期和应⽤场景详解备注: Android Service 启动⽅式,⽣命周期和应⽤场景详解: ContentProvider1进程⼀代码: ContentProvider1进程⼆代码: iOS APP打包上传审核和客服咨询流程(审核被拒,账号问题等):startService 和 bindService 区别: startService 特点:⼀旦服务开启跟调⽤者(开启者)就没有任何关系了。

开启者退出了,开启者挂了,服务还在后台长期的运⾏。

开启者不能调⽤服务⾥⾯的⽅法。

bindService 特点:bind的⽅式开启服务,绑定服务,调⽤者挂了,服务也会跟着挂掉。

绑定者可以调⽤服务⾥⾯的⽅法。

(说⽩了就和⼩程序⼀样,打开的时候使⽤,⽤完了就关闭拍屁股⾛⼈,⼀次性滴)注意:绑定服务不会调⽤onstart()或者onstartcommand()⽅法⼀,Service 含义:Service分为本地服务(LocalService)和远程服务(RemoteService): 1、本地服务依附在主进程上⽽不是独⽴的进程,这样在⼀定程度上节约了资源,另外Local服务因为是在同⼀进程因此不需要IPC,也不需要AIDL。

相应bindService会⽅便很多。

主进程被Kill后,服务便会终⽌。

2、远程服务为独⽴的进程,对应进程名格式为所在包名加上你指定的android:process字符串。

由于是独⽴的进程,因此在Activity所在进程被Kill的时候,该服务依然在运⾏,不受其他进程影响,有利于为多个进程提供服务具有较⾼的灵活性。

该服务是独⽴的进程,会占⽤⼀定资源,并且使⽤AIDL进⾏IPC稍微⿇烦⼀点。

Service启动⽅式(主要是1,2两种): 1、startService 启动的服务:主要⽤于启动⼀个服务执⾏后台任务,不进⾏通信。

黑马程序员安卓教程:Service 的生命周期图

黑马程序员安卓教程:Service 的生命周期图

Service 的生命周期图官方给出的 Service 生命周期图如图 1-5 所示。

该图左侧展示的是用 startService()方法启动的 Service 的生命周期,右侧展示的是用 bindService()方法启动的 Service 的生命周期。

The diagram on the left showsthe lifecycle when the service is created with startService() and the diagram on the right shows the lifecycle when the service is created with bindService().图 1-5 Service 生命周期图这个图说明了 Service 典型的回调方法,尽管这个图中将开启的 Service 和绑定的 Service 分开,但是我们需要记住,任何 Service 都潜在地允许被绑定。

所以,一个被开启的 Service 仍然可能被绑定。

实现这些方法,可以看到两层嵌套的 Service 的生命周期。

1.4.5 整体生命周期(The entire lifetime )Service 整体的生命时间是从 onCreate()被调用开始,到 onDestroy()方法返回为止。

和 Activity 一样,Service 在 onCreate()中进行它的初始化工作,在 onDestroy()中释放残留的资源。

比如,一个音乐播放 service 可以在 onCreate()中创建播放音乐的线程,在 onDestory()中停止这个线程。

onCreate() 和 onDestroy()会被所有的 Service 调用,不论 Service 是通过 startService()还是 bindService() 建立的。

The entire lifetime of a service happens between the time onCreate() is called and the time onDestroy() returns. Like an activity, a service does its initial setup in onCreate() and releases all remaining resources in onDestroy(). For example, a music playback service could 15create the thread where the music will be played in onCreate(), then stop the thread in onDestroy().The onCreate() and onDestroy() methods are called for all services, whether they're created by startService() or bindService().1.4.6 积极活动的生命周期(The active lifetime)Service 积极活动的生命周期(active lifetime)是从onStartCommand() 或onBind()被调用开始,它们各自处理由startService()或bindService()方法传过来的Intent对象。

Android服务Service使用总结资料

Android服务Service使用总结资料

Android服务Service使用总结一.Service简介Service是Android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能页面显示只能后台运行,并且可以和其他组件进行交互。

service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的,例如,一个service可能处理网络事物,播放音乐,执行文件I/O,或与一个内容提供者交互,所有这些都在后台进行。

我们一定要知道的是这里Service的后台运行并不是子线程。

Service的运行是在主线程中进行的,只是它没有界面显示而已,它的耗时操作同样需要开启子线程,否者会跟Activity一样出现ANR(application not response–程序没有响应)。

我们要知道的是主线程的内容包括UI和后台。

只要程序中的UI或后台其中一个在跑,程序都算是在运行状态。

(一)Service的创建和注册1.Service服务的创建必须要实现重写其中的onBind方法,可以在里面做各种操作,也可以接收传递过来的Intent 的数据做处理。

public class MyService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {System.out.println("MyService.onBind");return null;}}2.Service服务的注册,在AndroidManifest中注册<service android:name=".MyService" />服务的注册是四大组件中最简单的一个,一般只要设置name属性就可以了。

Android_Service生命周期及用法

Android_Service生命周期及用法

Android Service生命周期及用法!大伙儿好,上一节我讲解了Android Activity的生命周期,这一节我将讲解一下Service,第一咱们要明白Service具体是干什么的,何时用到和它的生命周期等。

Service概念及用途:Android中的效劳,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,若是咱们退出应历时,Service进程并无终止,它仍然在后台运行,那咱们何时会用到Service呢比如咱们播放音乐的时候,有可能想边听音乐边干些其他情形,当咱们退出播放音乐的应用,若是不用Service,我们就听不到歌了,因此这时就得用到Service了,又比如当咱们一个应用的数据是通过网络获取的,不同时刻(一段时刻)的数据是不同的这时咱们能够用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()方式。

黑马程序员安卓教程:Activity 的生命周期

黑马程序员安卓教程:Activity 的生命周期

Activity 的生命周期学到这里我们有必要对Activity有一个全新的认识。

Activity已经不能再简单的认为就是一个普通的类,其生命周期就是类的加载,对象的的创建和对象的卸载那么简单。

Activity从创建到销毁,整个生命周期是一个非常复杂的过程,该过程由Android系统负责维护。

1.3.1 Activity 的3 种状态我们人类有婴幼儿时期、青少年时期、中老年时期,Activity一样也有3种状态:Resumed、Paused、Stopped,这三种状态是Android 官方给出的,我们翻译过来可以理解为:激活或运行状态、暂停状态、停止状态。

这3种状态的特点如下:1、Resumed 状态:Activity 位于前端位置,并且获取到了用户的焦点。

也就是当前Activity 完全可见也可用。

注意:在Android中目前只允许同时只能有一个Activity位于前端位置。

2、Paused 状态:如果另外一个Activity 位于前端位置并且获取了焦点,但是该Activity 还依然可见,那么该Activity就处于了Paused状态。

比如如果另外一个Activity虽然位于前端,但是是透明的或者没有占满整个屏幕,那么就会出现上面的这种情况。

位于Paused状态的Activity依然是“存活”着的,但是如果系统内存极端的不足,那么就有可能被系统“杀死”以便释放内存。

3、Stopped 状态:当另外一个Activity 完全将该Activity 遮盖住的情况下,那么该Activity 就处于停止状态了。

位于停止状态的Activity依然“活着”,但是它已经对用户完全不可见了,因此只要系统需要释放内存就会将该Activity“杀死”。

我们编写的代码要根据Activity的不同状态让其做不同的工作,比如如果我们的Activity是用于播放视频的,那么当其位于Resumed状态时我们可以让视频正常的播放,当Activity位于Paused状态的时候,我们也应该让我们的视频暂停播放,当Activity位于Stopped状态时我们应该停止播放视频并视频资源。

【黑马程序员】servlet的生命周期及工作原理

【黑马程序员】servlet的生命周期及工作原理

【黑马程序员】servlet的生命周期及工作原理Servlet生命周期分为三个阶段:1,初始化阶段调用init()方法2,响应客户请求阶段调用service()方法3,终止阶段调用destroy()方法Servlet初始化阶段:在下列时刻Servlet容器装载Servlet:1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:<loadon-startup>1</loadon-startup>2,在Servlet容器启动后,客户首次向Servlet发送请求3,Servlet类文件被更新后,重新装载ServletServlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。

在Servlet的整个生命周期内,init()方法只被调用一次。

Servlet工作原理:首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。

在Servlet接口和GenericServlet中是没有doGet,doPost 等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。

黑马程序员安卓教程:Activity生命周期之onResume和onPause

黑马程序员安卓教程:Activity生命周期之onResume和onPause

黑马程序员安卓教程:Activity生命周期之onResume和onPause在Activity的生命周期中还有两个回调函数,它们分别是onResume和onPause。

这两个函数在Android Activity中的作用是什么?具体分析如下:1.生命周期的重启在新建工程“06_activity生命周期”的主Activity中,重写了onResume ()方法,代码如例1-1:对onResume图1-1所示从图1-1可知:在用户和Activity交互时会调用该方法。

2.生命周期的暂停暂停状态(Paused):Activity失去焦点,Activity界面被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互。

一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,与窗口管理器保持连接),但是在系统内存不够用的时候将被杀掉。

新建工程“06_activity生命周期”的主Activity中,重写了onPause ()方法,代码如例1-2所示:例1-2对onPause图1-2所示从图1-1可知:当一个Activity被运行在后台时,这个方法会被调用。

假设有两个Activity,分别是Activity A和Activity B,当启动Activity B覆盖Activity A时,Activity A就会执行其onPause 方法即Activity A失去焦点。

下面我们来模拟该应用场景:第一,新建应用“透明应用“,并在清单文件中设置该应用主页面(模拟Activity B)的风格为:透明且无状态栏。

代码如例1-3:所示:图1-3所示从图1-3可知:Activity A的页面中设置了一个按钮,我们在实验中可以通过该按钮能否点击来判断Activity A焦点是否失去。

第三,运行Activity A,效果如图1-4所示:图1-4所示从图1-4可知:点击按钮出现高亮,即说明该Activity A没有失去焦点。

AndroidService生命周期详解

AndroidService生命周期详解

AndroidService⽣命周期详解引⾔应⽤程序组件有⼀个⽣命周期——⼀开始Android实例化他们响应意图,直到结束实例被销毁。

在这期间,他们有时候处于激活状态,有时候处于⾮激活状态;对于活动,对⽤户有时候可见,有时候不可见。

组件⽣命周期将讨论活动、服务、⼴播接收者的⽣命周期——包括在⽣命周期中他们可能的状态、通知状态改变的⽅法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。

上篇Android开发之旅:组件⽣命周期(⼀)讲解了论活动的⽣命周期及他们可能的状态、通知状态改变的⽅法。

本篇将介绍服务和⼴播接收者的⽣命周期:服务⽣命周期⼴播接收者⽣命周期1、服务⽣命周期⼀个服务可以⽤在两个⽅⾯:它可以启动且允许⼀直运⾏直到有⼈停⽌它,或者它⾃⼰停⽌。

在这种模式,通过调⽤Context.startService()启动服务及通过调⽤ Context.stopService()停⽌服务。

服务也可以通过调⽤Service.stopSelf()或 Service.stopSelfResult()停⽌⾃⼰。

仅需要调⽤⼀次stopService()停⽌服务,⽽不管调⽤ startService()了多少次。

通过使⽤相关接⼝可以编程地操作服务。

客户端建⽴与Service对象的⼀个连接及使⽤该连接调⼊服务。

连接通过调⽤Context.bindService()建⽴,通过调⽤Context.unbindService()关闭。

多个客户端可以绑定到同⼀个服务。

如果服务尚未启动,bindService()可以选择启动它。

这两种模式并不是完全分离的。

你可以绑定到⼀个⽤startService()启动的服务。

例如,⼀个后台⾳乐服务可以通过使⽤定义了⾳乐播放的 Intent对象调⽤startService()启动。

直到后来,⽤户可能想对播放器做⼀些控制或者获取当前歌曲的⼀些信息,⼀个活动将调⽤ bindService()与服务建⽴连接。

黑马程序员安卓教程:服务生命周期之开启和停止

黑马程序员安卓教程:服务生命周期之开启和停止

黑马程序员安卓教程:服务生命周期之开启和停止Service是Android四大控件之一,我们在“11_省电助手”工程中已经接触了服务的基本使用方法,下面通过一个DEMO进一步了解服务的生命周期。

1.新建工程【File】→【new】→【Android Application Project】命名为:01_服务的生命周期2.编写布局根据需求设计布局,效果如图1-1所示:图1-1所示图1-1对应的布局代码如例1-1:例1-1例1-1可知:当点击“开启服务”按钮时便执行方法start即开启一个服务;当点击“停止服务”按钮则执行方法stop关闭一个服务。

3.编写一个服务在“01_服务的生命周期”中新建一个类命名为:TestService,使TestService继承service并重写onBind方法,代码如例1-2所示:例1-2在TestService类中重写该服务的生命回调函数。

重写onCreate方法,在创建该service时会执行该方法,代码如例1-3:例1-3重写onDestroy方法,在销毁该服务时会执行这个方法,代码如例1-4:例1-4重写onStartCommand方法,在执行android.content.Context.startService时会调用这个方法,代码如例1-5:例1-54.声明服务在清单文件中声明该服务,具体代码如例1-6:例1-65.编写点击事件在主Activity中编写按钮的点击事件,当点击按钮“开启服务”,其响应的点击事件如例1-6:例1-6在主Activity中编写按钮的点击事件,当点击按钮“停止服务”,其响应的点击事件如例1-7:例1-7运行程序,点击按钮开启服务,此时logcat打印信息如图1-2所示:图1-2所示再次点击开启服务按钮,logcat打印如图1-3所示:图1-3所示点击停止服务按钮,logcat打印如图1-4所示:图1-4所示通过图1-2,图1-3以及图1-4可知采用startService和stopservice去开启服务和停止服务有以下几个特征:第一:服务只会被创建一次,如果服务已经被创建就不会重新执行onCreate方法了第二:服务只会被停止一次,如果服务已经停止就不会重新执行onDestroy方法了第三:若果服务已经开启,多次调用startService方法,服务只会执行onstartCommand方法和onStart方法(onStart这个方法已经过时)。

Android服务Service使用总结

Android服务Service使用总结

Android服务Service使用总结一.Service简介Service是Android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能页面显示只能后台运行,并且可以和其他组件进行交互。

service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在后台的,例如,一个service可能处理网络事物,播放音乐,执行文件I/O,或与一个内容提供者交互,所有这些都在后台进行。

我们一定要知道的是这里Service的后台运行并不是子线程。

Service的运行是在主线程中进行的,只是它没有界面显示而已,它的耗时操作同样需要开启子线程,否者会跟Activity一样出现ANR(application not response–程序没有响应)。

我们要知道的是主线程的内容包括UI和后台。

只要程序中的UI或后台其中一个在跑,程序都算是在运行状态。

(一)Service的创建和注册1.Service服务的创建必须要实现重写其中的onBind方法,可以在里面做各种操作,也可以接收传递过来的Intent 的数据做处理。

public class MyService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {System.out.println("MyService.onBind");return null;}}2.Service服务的注册,在AndroidManifest中注册<service android:name=".MyService" />服务的注册是四大组件中最简单的一个,一般只要设置name属性就可以了。

Service 生命周期

Service 生命周期

Service 生命周期Android Service 生命周期可以促使移动设备的创新,让用户体验到最优越的移动服务,只有broadcast receivers执行此方法的时候才是激活的,当onReceive()返回的时候,它就是非激活状态。

Serverice的两种启动和结束模式:1、startServerice,stopServerice如果没有程序停止它或者它自己停止,service将一直运行。

在这种模式下,service开始于调用Context.startService() ,停止于Context.stopService(). service可以通过调用Android Service 生命周期() 或 Service.stopSelfResult()停止自己。

不管调用多少次startService() ,只需要调用一次 stopService() 就可以停止service。

2、bindServerice,unbindServerice可以通过接口被外部程序调用。

外部程序建立到service的连接,通过连接来操作service。

建立连接调开始于Context.bindService(), 结束于Context.unbindService(). 多个客户端可以绑定到同一个service,如果service没有启动, bindService() 可以选择启动它。

这2种模式不是完全分离的。

你可以可以绑定到一个通过startService()启动的服务。

如一个intent想要播放音乐,通过startService() 方法启动后台播放音乐的service。

然后,也许用户想要操作播放器或者获取当前正在播放的乐曲的信息,一个activity就会通过bindService()建立一个到此service的连接. 这种情况下 stopService() 在全部的连接关闭后才会真正停止service。

像activity一样, service也有可以通过监视状态实现的生命周期。

04-Android程序设计-Service.

04-Android程序设计-Service.
不仅能够正常启动Service,而且能够调用正在运行中的
Service实现的公有方法和属性
18
绑定方式(2)

当创建一个能提供绑定功能的服务时,必须提供一个IBinder 对象,客户端能使用这个对象与服务进行交互。在Android中 有三种方式定义方式:

扩展Binder类 使用Messenger 使用AIDL (Android Interface Definition Language
6
启动方式和绑定方式的结合

这两种使用方法并不是完全独立的,在某些情况下可以混合 使用

以MP3播放器为例,在后台的工作的Service通过 Context.startService()启动某个特定音乐播放 但在播放过程中如果用户需要暂停音乐播放,则需要通过 Context.bindService()获取服务链接和Service对象 进而通过调用Service的对象中的函数,暂停音乐播放过程,并保存相 关信息 在这种情况下,如果调用Context.stopService()并不能够停止Service ,需要在所有的服务链接关闭后,Service才能够真正的停止

第4行、第8行和第12行的代码重载onCreate()、onStart()和 onDestroy()三个函数时,必须要在代码中调用父函数
12
启动方式(5)

注册Service
在AndroidManifest.xml文件中注册,否则这个Service根本
无法启动 AndroidManifest.xml文件中注册Service的代码如下
Service简介
Service简介

Service

Android系统的后台服务组件,适用于开发无界面、长时间运行的应用 功能 后台运行,没有用户界面,不可交互 比非活动状态的Activity 优先级高,被Android系统终止的可能性小 即使Service被系统终止,只要资源足够Service也将自动恢复运行状 态 用于进程间通信(Inter-Process Communication,IPC),解决两个 不同Android应用程序进程之间的调用和通讯问题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Service 的生命周期回调函数
和Activity 一样,service 也有一系列的生命周期回调函数,你可以实现它们来监测service 状态的变化,并且在适当的时候执行适当的工作。

Like an activity, a service has lifecycle callback methods that you can implement to monitor changes in the service's state and perform work at the appropriate times. The following skeleton service demonstrates each of the lifecycle methods:
13
下面的service展示了每一个生命周期的方法:
【文件1-5】Service生命周期回调函数
1.public class TestService extends Service {
2.int mStartMode; //indicates how to behave if the service is killed
3.IBinder mBinder;// interface for clients that bind
4.boolean mAllowRebind;// indicates whether onRebind should be used
5.
6.@Override
7.public void onCreate() {
8.// The service is being created
9.}
10.
11.@Override
12.public int onStartCommand(Intent intent, int flags,int startId){
13.// The service is starting, due to a call to startService()
14.return mStartMode;
15.}
16.
17.@Override
18.public IBinder onBind(Intent intent) {
19.// A client is binding to the service with bindService()
20.return mBinder;
21.}
22.
23.@Override
24.public boolean onUnbind(Intent intent) {
25.// All clients have unbound with unbindService()
26.return mAllowRebind;
27.}
28.
29.@Override
30.public void onRebind(Intent intent){
31.// A client is binding to the service with bindService(),
32.// after onUnbind() has already been called
33.}
34.
35.@Override
36.public void onDestroy(){
37.// The service is no longer used and is being destroyed
38.}
39.}
注意:不同于Activity的生命周期回调方法,Service不须调用父类的生命周期回调方法。

Unlike the activity lifecycle callback methods,you are not required to call the superclass implementation of these callback methods.
14。

相关文档
最新文档