Android Service tips

晏正豪
2023-12-01

1)多个组件可同时绑定服务,全部取消绑定后,服务即会被销毁
2)startForegroundService之后5秒没有调用startForeground,系统会认为服务anr
3)应用被系统认定为前台应用需要满足的条件(至少一种):
        3.1)具有可见activity
        3.2)具有前台service
        3.3)另一个前台应用已关联到该应用(绑定service或者使用content provider)
4)android:exported = false:只有同一个应用内的组件才能启动该服务
5)处于运行状态时,服务可以使用 Toast 通知或状态栏通知来通知用户所发生的事件
6)前台服务通知:除非停止服务(stopSelf()/stopService())或者从前台移除(stopForeground()),否则不能清除通知
7)Android 9(API 级别 28)及之后,需要申请android.permission.FOREGROUND_SERVICE权限,才能启动前台服务
8)先startService()拉起了服务,此时有客户端bindService()绑定到了该服务,在所有客户端都调用了unBindService()之前,调用stopService()/stopSelf()不会停止服务
9)多次startService()会多次触发onStartCommand()
10)当A应用bindService拉起服务时会触发一次onBind,此时B应用再bindService不会触发onBind回调,除非之前A应用调用退出或者调用了unBindService;这是因为服务启动时返回的binder对象保存在AMS那里,如果没有解绑,其他应用再次bindService时AMS检测到服务正在运行就会直接返回该binder对象给发起绑定的应用,也就不会再触发服务的onBind回调
11)onUnbind触发的条件:所有客户端都退出或者调用了unbindService()
12)onRebind触发条件:onUnbind返回true,之后有客户端调用bindService重新绑定服务

13)服务重启/销毁生命周期流程图(官网):

https://developer.android.com/guide/components/bound-services?hl=zh-cn#Lifecycle

14)dumpsys查看某个应用的服务状态

dumpsys activity s com.sina.weibo

 类似资料:

相关阅读

相关文章

相关问答