服务类onStartCommand()方法的返回值

时间:2017-03-05 14:13:38

标签: android service

我正在重新阅读Service文档,并引起了我对onStartCommand()方法的返回值的注意。

例如,如果你返回START_NOT_STICKY,并且你有"等待启动命令"如果服务被系统杀死,则重新启动该服务。除了一件事,这完全没问题。什么"等待启动命令"这里?更准确地说,是否存在"等待启动命令"因为它不可能从主线程中调用startService()吗?

我唯一想到的是startService被调用并放入主线程(Looper' s)事件队列的尾部,在它被执行之前,服务被销毁并离开事件队列使用"待定启动命令"。

你认为我是完全失去了还是走在了正确的道路上?

1 个答案:

答案 0 :(得分:2)

传递给onStartCommand()的参数之一是标识此命令的int(通常称为startId)。 startId可以传递给stopSelf()。零参数stopSelf()表示“我已完成此服务”,而单参数stopSelf(int)表示“我完成了此命令以及之前的所有命令”。

所以,假设我们有这一系列事件:

  • onStartCommand()使用startId 1
  • 进行了调用
  • onStartCommand()使用startId 2
  • 进行了调用
  • onStartCommand()使用startId 3
  • 进行了调用
  • stopSelf()使用startId 2
  • 进行了调用
  • 流程终止

此处,如果onStartCommand()的返回值为START_STICKYSTART_REDELIVER_INTENT,则Android会再次启动您的流程(当内存条件改善时),以便您可以执行任何操作{ 3的{1}}。

startId说“如果由于内存不足而终止我的进程,并且内存有所改善,那就没关系,我会留下来,直到有一些新命令要处理”。