标签:
一 、什么是Service?什么时候我们需要使用service?
service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。
service是运行在后台的应用,对于用户来说失去了被关注的焦点。这就跟我们打开了音乐播放之后,便想去看看图片,这时候我们还不想音乐停止,这里就会用到service;又例如,我们打开了一个下载链接之后,我们肯定不想瞪着眼睛等他下载完再去做别的事情,对吧?这时候如果我们想手机一边在后台下载,一边可以让我去看看新闻啥的,就要用到service。
总言之:service用于处理后台任务
二、service分类
一般我们认为service分为两类,本地service和远程service。
本地service顾名思义,那就是和当前应用在同一个进程中的service,彼此之间拥有共同的内存区域,所以对于某些数据的共享特别的方便和简单;
远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致了我们在不同的进程间无法使用一般的方式共享数据。在这里android为我们提供了一个AIDL工具,(android interface description language)android接口描述语言。在后边我们将会对其进行详细的介绍。
三、Service两种启动方式及生命周期
由上图知,Service有两种启动方式:
Unbounded模式下的startService();
Bounded模式下的bindService();
startService()
使用场景:通过startservice开启的服务.一旦服务开启, 这个服务和开启他的调用者之间就没有关系了.
调用者不可以访问 service里面的方法. 调用者如果被系统回收了或者调用了ondestroy方法, service还会继续存在
生命周期:
context.startService() -> onCreate() -> onStart() -> Service running -> context.stopService() -> onDestroy() -> Service stop
如果Service还没有运行,则android先调用onCreate(),然后调用onStart();
如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
如果stopService的时候会直接onDestroy,如果是调用者自己直接退出(onPause)而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。
可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止服务,只要调用一次stopService()方法便可以停止服务,无论调用了多少次的启动服务方法。
所以调用startService的生命周期为:onCreate --> onStart (可多次调用) --> onDestroy
bindService()
使用场景:通过bindService开启的服务,服务开启之后,调用者和服务之间 还存在着联系。
一旦调用者挂掉了.service也会跟着挂掉 .
生命周期:
context.bindService() -> onCreate() -> onBind() -> Service running -> onUnbind() -> onDestroy() -> Service stop
onBind()将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的实例、运行状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。
当其调用者退出(onPause)时或者调用unbindService(connection); (可以不用)可以停止服务。
所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
标签:
原文地址:http://www.cnblogs.com/android-for-dh/p/4455105.html