概述
一、什么是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的运行模式,
- START_STICKY 是显示启动和停止的service使用的,它确保Service实例一直保持启动状态,但不能保证Intent被处理执行;
- START_REDELIVER_INTENT:可以确保service在意外终止后将自动重新运行并保证Intent被处理;
- START_NOT _STICKY:在service被以为终止后将停止运行。
最后
以上就是明亮麦片为你收集整理的android四大组件之Service的全部内容,希望文章能够帮你解决android四大组件之Service所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复