Service知识点
目录
说说 Activity、Intent 和 Service 是什么关系
一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?
Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
Service的启动
Service 是 Android 中实现程序后台运行的解决方案,非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。Service默认运行在UI主线程中,所以不能做耗时操作,只能在Service中创建子线程来完成耗时操作。
补充说明:Service有两种启动方式,startService()和bindService(),它们之间的区别是:
* startService()启动后无返回结果,startService()的生命周期有三个函数,分别是onCreate()、onStartCommand()和onDestory()。当我们首次startSerivce()启动一个service的时候,会调用service的onCreate函数创建该服务,然后调用onStartCommand函数执行操作,可以调用stopSevice/stopSelf来结束一个Service(多次调用都不会有异常)。(注:多次通过startService启动服务,onCreate只执行1次,都会调用onStartCommand。)启动后,它就独立于调用者而运行,因此任务结束后,Service需要stopSevice/stopSelf函数来停止该服务,避免消耗系统资源或电量。
* bindService()绑定Service后可以进行交互操作(发请求、获取结果或IPC通信),bindService的生命周期有四个函数,分别是onCreate()、onBind() 、onUnBind()和onDestory(),首次启动会先执行onCreate()方法创建服务,onBind() 会将调用者和服务绑定在一起,调用者退出时可以调用unbindService()进行解绑操作(方法中会调用onUnBind和onDestory)。(注:多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。)
Service的生命周期?
Service 的生命周期
* 回调方法含义:
* onCreate:服务第一次被创建时调用;
* onStartComand:服务启动时调用;
* onBind:服务被绑定时调用;
* onUnBind:服务被解绑时调用;
* onDestroy:服务停止时调用;
* 生命周期:
* 只调用 startService() 启动服务:onCreate() -> onStartCommand() -> onDestory()
* 只调用 bindService() 绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory()
* 同时使用startService()与bindService():onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory。
* 种类:
* startService():开启Service,调用者退出后Service仍然存在。
* bindService():开启Service,调用者退出后Service也随即退出。
Service的调用方式?
// startService
* 第一步:新建类并继承Service且必须重写onBind()方法,有选择的重写onCreate()、onStartCommand()及onDestroy()方法。
* 第二步:在配置文件AndroidManifest.xml中进行注册,否则不能生效。
* 第三步:在 Activity 中利用 startService(Intent) 可实现 Service 的启动。
* 第四步:在 Activity 中 stopService(Intent) 停止服务,或者在Service任意位置调用stopSelf();
public class MyService extends Service { public MyService() { } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { //处理具体的逻辑 //必须调用stopService或者stopSelf方法才能停止 stopSelf(); } }).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } }
//在配置文件AndroidManifest.xml中进行注册
<service android:name=".MyService" android:enabled="true" android:exported="true" />