文档告诉我们,一个service可以同时start并且bind,在这样的情况,系统会一直保持service的运行状态。如果service已经start了或者BIND_AUTO
_CREATE标志被设置。如果没有一个条件满足,那么系统将会调用onDestory方法来终止service。所有的清理工作(终止线程,反注册接收器)都在onDestory中完成。
而启动service,根据onStartCommand的返回值不同,有两个附加的模式。
分析onStartCommand方法参数的作用和返回值的作用:
1、根据这个方法的返回值不同可以有两种启动模式START_NOT_STICKY,START_STICKY(当进程被杀死的时候,是否重新启动。如果是参数START_REDELIVER_INTENT表示当服务所在进程被杀死后,重新启动,并且重新传递Intent内容,其它两个参数不会重新传递intent,都为null)
2、返回START_REDELIVER_INTENT的时候,不论启动多少次,当重新启动的时候,也会启动多少次。
3、是当前服务的标记
4、第三个参数startId表示当前启动的Service的次数
Ø 拥有service的进程具有较高的优先级
文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。
A.
如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。
B.
如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.
C. 如果客户端已经连接到service
(bindService),那么拥有Service的进程则拥有高的优先级,可以认为service是可见的。
D. 如果service可以使用startForeground(int,
Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。
如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性
杭州腾科-{技术文献}AndroidService
杭州电脑/网络相关信息
2022-04-06
2022-02-20
2022-01-07
2022-01-06
2021-12-30
2021-12-30
2021-12-28
2021-12-15
2021-12-12
2021-12-05