现在的位置: 首页 > 综合 > 正文

android四大组件之Service

2017年11月14日 ⁄ 综合 ⁄ 共 1644字 ⁄ 字号 评论关闭

一、什么是Service

Service是一个幕后工作者,是运行在android应用后台的一种组件。与activity不同的是,Service没有自己的用户界面,因为它们不需要于用户直接交互。

        二、基本用途

一种是执行长时间运行的耗时操作,如网络下载,播放音乐,文件系统监控等;另外一种是组件之间的交互。通过将某些功能以Service组件的形式进行封装,然后提供给其他应用组件调用。

三、Service的生命周期

启动模式:startService:onCreate()——>onStartCommand()——>service运行——>onDestroy()

绑定模式:bindService:onCreate()——>onBind()——>onStartCommand()——>service运行——>onUnBind()——>onDestroy()

        四、Service的创建和使用

创建步骤:

(1)创建一个Service类,该类继承android.app.Service类;

 (2)在Service类中实现OnStartCommand等生命周期的方法;业务逻辑实在OnStartCommand中实现

 (3)在AndroidManifest.xm文件中配置Service节点。节点的必选属性是android:name,它表示实现Service组件的类名称。

 (4)在Activity中,通过调用StartService()就可以来启动Service。通过stopService()方法停止Service。

注意的是:Service组件也是运行在应用的主线程中,即UI线程,为了避免出现ANR,必须放在开启一个独立的线程中运行。

当业务处理完毕之后,必须条用StopService来停止Service,否则它会在后台一直运行。

五、Service运行机制

Service组件没有自己单独的进程,它有它所在的android应用中的其它组件运行在同一个进程中,当然也可以运行在调用者的进程中。

Service组件也没有自己的单独的线程,它运行在进程中的主线程,因此,如果执行比较耗时的操作,应该创建一个单独的线程来执行。

六、Service安全与权限

在实际应用中,很多情况下多不希望Sevice被任意的其它组件调用访问。

方法:

(1)在Service标签中使用android:permission属性来指定Service访问权限,这是一个用户自定义权限,在调用者中必须声明该权限

(2)不配置inte-filter节点,确保对service的调用自能通过显示Intent。即明确知道Service实现类名的情况下调用。

(3)在Service标签中添加android:exported=false 。设置Service为当前应用私有的。

七、创建前台Service

参照:http://blog.csdn.net/ameyume/article/details/9150755

           八、提高Service的优先级

进行的优先级从高到低分别为:前台进程、可视进程、服务进程、后台进程和空进程。

参照:http://blog.csdn.net/lonely_fireworks/article/details/18005971

        九、Service运行模式

Service中的业务逻辑主要在OnStartCommand方法中实现,每次通过调用方法startService来启动service,都调用onStartCommand方法,其中方法的返回值确定了Service的运行模式,

  1. START_STICKY 是显示启动和停止的service使用的,它确保Service实例一直保持启动状态,但不能保证Intent被处理执行;
  2. START_REDELIVER_INTENT:可以确保service在意外终止后将自动重新运行并保证Intent被处理;
  3. START_NOT _STICKY:在service被以为终止后将停止运行。

抱歉!评论已关闭.