Service
Service是什么
- Service 是 Android 四大组件之一,用于在后台执行长时间运行操作而没有用户界面的组件,可以在应用程序的生命周期之外运行
Service的启动方式和生命周期
Service有两种方式启动,一种是通过startService()启动,另一种是通过bindService()方式启动
通过startService()启动的步骤
1. 创建一个继承自 Service,并在该类中实现相应的逻辑
2. 在AndroidManifest.xml文件中配置该Service
3. 在启动 Service 的地方创建一个 Intent 对象,用于指定启动的 Service 类
4. 当 Service 完成,不需要后可以调用stopService() 方法来停止 Service 运行
通过bindService()启动的步骤
1. 创建一个继承自 Service 类的子类,并实现 IBinder 接口的对象。重写 onBind() 方法,并从该方法返回前一步创建的 IBinder 实例
2. 客户端中创建一个 ServiceConnection 的实例,并实现其回调方法,
3.在ServiceConnection的回调方法onServiceConnected() 中,接收到与 Service 绑定的IBinder 实例。使用接收到的IBinder实例,调用提供的公共方法进行与服务的交互。
4.当再需要与Service交互时,调用unbindService()方法解除绑定。解除绑定后可以通过stopService() 方法停止 Service 的运行
生命周期
Service的启动方式有两种,所以它们的生命周期也有两种
- 绑定Activity的服务生命周期
1. onCreate() :在Service被开启的时候调用,表示服务正在被创建
2. onStartCommand() :开始服务,执行后台任务
3. onDestroy() :销毁服务
- 没有绑定Activity的服务生命周期
1. onCreate() :在Service被开启的时候调用,表示服务正在被创建
2. onBind() :绑定服务,通过返回一个IBinder对象提供接口供客户端与Service进行通信
3. onUnbind() :解绑服务 当客户端调用unbindService()方法与Service解除绑定时回调
3. onDestroy() :销毁服务
Service的两种启动方式?区别在哪
-
通过startService()方式启动service,service的生命周期与启动的Activity无关,意味着当启动的Activity被销毁时service不会被销毁
-
通过bindService()启动,service的生命周期与启动的Activity绑定,service生命周期受到Activity的影响,当Activity被销毁时,service也将会被销毁。
IntentService是什么,和Service的区别?
- IntentService 是继承自 Service 并处理异步请求的一个类,每次只处理一个请求,并且在完成所有请求后自动停止。在 IntentService 内有一个工作线程来处理耗时操作,当任务执行完后,IntentService 会自动停止,不需要我们去手动结束。IntentService 本质上就是一种特殊的Service,继承自Service,是一个抽象类、它内部实现HandlerThread和Handler实现异步操作lntentService和Service优先级一致,比Thread高。Service处于主线程不能直接进行耗时操作。IntentService内部有HandlerThread,可以进行耗时操作。
service的onStartCommand方法有几种返回值?各代表什么意思?
- 在service中,onStartCommand()方法有三种返回值:
1. START_STICKY(常量值:1):sticky()的意思是“粘性的”。服务与应用程序"粘"在一起,如果在执行完onStartCommand后,服务被意外终止,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null,这种粘性的行为可以确保服务的持续运行,并且在异常终止后能够自动恢复
2. START_NOT_STICKY(常量值:2):“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被意外终止,系统不会自动重启该服务。
3. START_REDELIVER_INTENT(常量值:3):重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被意外终止,系统会自动重启该服务,并将Intent的值传入。