如果活动被杀,服务会怎样?

时间:2014-04-17 19:05:01

标签: java android multithreading service broadcastreceiver

我有一个Service,当新的来电到达时,它从BroadcastReceiver开始。在那Service我开始一个新的Thread并在那里完成所有的工作。如果我的应用程序的Main Activity被杀,会发生什么?我问,因为我意识到在这种情况下Service的{​​{1}}会上升一个!就像再次调用startID的{​​{1}}或类似的东西一样。我举一个简短的例子:

  1. Service正在后台运行,来电已到,onStartCommand()启动,Main Activity被用户操作调用,Service被销毁。
  2. stopSelf()正在运行,来电已到,Service启动,Main Activity被清除最近的应用列表,Service被用户操作调用{{1}因为Main Activity不匹配而未被销毁。
  3. stopSelf()未运行(通过清除最近的应用列表终止),来电到达,Service启动,startID被用户操作调用,Main Activity被销毁
  4. 这很奇怪,因为ServicestopSelf()被杀时会以某种方式改变其值。我在Service的{​​{1}}方法中使用startID,因此无法使用新的Main Activity重新创建START_NOT_STICKY。有人可以向我解释一下吗?当Service被杀时,onStartCommand()或服务运行的单独Service会发生什么?提前谢谢!

1 个答案:

答案 0 :(得分:1)

从“最近”中删除活动并不会导致死亡。如果来电广播导致“startService”呼叫,则将再次调用服务的“onStartCommand”而不会出现问题(Android onCreate or onStartCommand for starting service)。

因此,在#2中,您可能认为您的活动“已经死亡”,但事实并非如此,并且由于每次调用onStartCommand时startId都会更改,因此启动该服务的下一个请求将不会与之前的任何startId匹配。这是预期的行为。

相关问题