我正在重新阅读Service文档,并引起了我对onStartCommand()方法的返回值的注意。
例如,如果你返回START_NOT_STICKY,并且你有"等待启动命令"如果服务被系统杀死,则重新启动该服务。除了一件事,这完全没问题。什么"等待启动命令"这里?更准确地说,是否存在"等待启动命令"因为它不可能从主线程中调用startService()吗?
我唯一想到的是startService被调用并放入主线程(Looper' s)事件队列的尾部,在它被执行之前,服务被销毁并离开事件队列使用"待定启动命令"。
你认为我是完全失去了还是走在了正确的道路上?
答案 0 :(得分:2)
传递给onStartCommand()
的参数之一是标识此命令的int
(通常称为startId
)。 startId
可以传递给stopSelf()
。零参数stopSelf()
表示“我已完成此服务”,而单参数stopSelf(int)
表示“我完成了此命令以及之前的所有命令”。
所以,假设我们有这一系列事件:
onStartCommand()
使用startId
1 onStartCommand()
使用startId
2 onStartCommand()
使用startId
3 stopSelf()
使用startId
2 此处,如果onStartCommand()
的返回值为START_STICKY
或START_REDELIVER_INTENT
,则Android会再次启动您的流程(当内存条件改善时),以便您可以执行任何操作{ 3的{1}}。
startId
说“如果由于内存不足而终止我的进程,并且内存有所改善,那就没关系,我会留下来,直到有一些新命令要处理”。