[Android答答答]什么是Service


推荐阅读Carson大佬的 一份全面 & 简洁的 Service 知识讲解攻略

1. 概念

1.1 什么是Service

Service是一种可在后台长时间执行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC)。例如,服务可在后台处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序进行交互。
服务分为三种类型:
前台:
前台服务执行一些用户能注意到的操作。例如,音频应用会使用前台服务来播放音频曲目。前台服务必须显示通知。即使用户停止与应用的交互,前台服务仍会继续运行。
后台:
后台服务执行用户不会直接注意到的操作。例如,如果应用使用某个服务来压缩其存储空间,则此服务通常是后台服务。
绑定:
当应用组件通过调用 bindService() 绑定到服务时,服务即处于绑定状态。绑定服务会提供客户端-服务器接口,以便组件与服务进行交互、发送请求、接收结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。仅当与另一个应用组件绑定时,绑定服务才会运行。多个组件可同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。

1.2 Service的启动方式

启动方式分为两种,startService和bindService

1.3 Service的生命周期是怎么样的

官方的生命周期图
在这里插入图片描述

startService方式开启:

startService:onCreate()->onStartCommond()
stopService: onDestory()

bindService方式开启:

bindService:onCreate()->onBind()
unbindService: onUnbind()->onDestory()

2. 原理

2.1 Service可以先start再bind或者先bind再start吗

操作步骤结果关闭Service
先startService再bindServiceonCreate->onStartCommond->onBind必须先unbindService再stopService,service才会关闭
先bindService再startServiceonCreate->onBind->onStartCommond同上,必须先解绑unbindService再stopService,service才会关闭

关闭的时候看日志可以看出,如果开启的时候是bind的方式开启,那么关闭service必须先解绑service再stopservice。

2.2 多次调用bindService会怎么样

只会执行一次onBind()

2.3 Service后台常驻保活方案

1.将service的等级优先级提高,比如前台服务

2.4 Service中怎么弹dialog

dialog的显示依赖于Activiy,如果需要在service中显示,可以创建一个全局的dialog,设置dialog的window的type是system alert,

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)

user-permissions也需要增加权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值