Service 组件

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的值传入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值