1.什么是Service?
Service是一个可以在后台执行长时间操作但是不使用界面的组件,包括StartService()和BindService();Service通过其他组件调用来执行,但是BroadcastReceiver不可以调用。
2.生命周期方法
onCreate();//仅仅会调用一次,一般做初始化工作,在onStartCommand()和onBind()方法之前。
onStartCommand();//通过startService()调用会执行此方法。
onBind();//通过bindService()调用会执行此方法。
onDestroy();//最后一个生命周期方法,这个方法被调用时,Service会销毁,一般在这个方法里做资源释放工作
3.清单文件中注册
android:name //唯一的必填项
android:enabled //如果为true,这个Service可以被系统实例化,否则不可以,默认为true
android:exported //如果为true,则其他的应用组件也可以调用并且与之互动。如果为false,则只能本应用可以调用。
如果定义了intent-filter则为true,不存在则为false;
android:process //指定Service的所在进程,默认在主进程中
android:isolatedProcess //如果为true,则这个Service运行区别于主进程的一个特殊进程。默认为false
android:permission //需要指定的权限才能启动这个Service
android:icon //象征Service的图标
android:label //象征Service的名称
4.onStartCommand返回值
START_NOT_STICKY //如果系统在 onStartCommand() 返回后终止服务,则除非有挂起 Intent 要传递,否则系统不会重建服务。
这是最安全的选项,可以避免在不必要时以及应用能够轻松重启所有未完成的作业时运行服务。
START_STICKY //如果系统在 onStartCommand() 返回后终止服务,则会重建服务并调用 onStartCommand(),但绝对不会重新传递最后一个 Intent。
相反,除非有挂起 Intent 要启动服务(在这种情况下,将传递这些 Intent ),否则系统会通过空 Intent 调用 onStartCommand()。
这适用于不执行命令、但无限期运行并等待作业的媒体播放器(或类似服务)。
START_REDELIVER_INTENT //如果系统在 onStartCommand() 返回后终止服务,则会重建服务,并通过传递给服务的最后一个 Intent 调用 onStartCommand()。
任何挂起 Intent 均依次传递。这适用于主动执行应该立即恢复的作业(例如下载文件)的服务。