一.简介
Service组件不提供界面,一般处于后台用于耗时计算,常见的使用如:定位,更新等..
Service有两种状态:启动状态和绑定状态。Service运行在UI线程中,因此需要进行耗时计算的时候,还是得开辟线程进行操作。
二.详细
前台进程:会显示在通知栏中,如音乐播放器,天气等Notification
后台进程:没有界面交互,一般情况默认的Service
1.启动状态:
主要用于启动一个服务执行后台任务,不进行通信。
启动:startService
停止:stopService/stopSelf
处于启动状态的Service都会运行在后台,不受启动它的其他组件(Activity..)的影响,无论Service被startService 多少次,Service都只会执行一次onCreate,只会创建一个Service对象,onStartCommand(Android2.0前使用的onStart)会被调用多次,次数和startService 一样。
2.绑定状态:
方法启动的服务要进行通信。
启动:bindService
停止:unbindService/绑定的组件销毁(onDistroy)。
同样Service只会执行一次onCreate,只会创建一个Service对象,onStartCommand则不会调用,解绑后Service自动销毁。
Service的onBind如果返回null,则调用bindService会启动Service,但不会连接上Service,ServiceConnection.onServiceConnected不会被调用,使用unbindService销毁Service。
3.启动和绑定的混合使用:
Service只会执行一次onCreate,onStartCommand执行次数次数和startService 一样,bindService时不会执行onStartCommand,
unbindService时不会销毁Service,停止:stopService/stopSelf。(注意:stopService前没有调用unbindService,或者bindService"依附"的Context组件没有销毁,该Service也不会销毁。停止的正确顺序是unbindService-stopService/stopSelf)
4.注册相关
<service
android:name=".service.CheckAdService"//服务名
android:exported="true"//其他应用能否访问该服务
android:enabled="true"//否可以被系统实例化。true--系统默认启动,false--不启动。
android:label="@string/app_name"//显示的服务名称
android:process="com.yweather.app"//所运行进程名字
/>
5.生命周期
Paste_Image.png
6.Thread和Service
Thread的优先级低于Service,Service可以跨进程使用,Service占用的资源较Thread更多,
大部分情况需要交互的时候选择Service,不需要时选择Thread,当然也根据该执行的任务的重要性具体判断。
网友评论