我想在服务停止时发布广播。当发生这种情况时,保证会运行什么回调?我希望其他应用程序知道它的失败,我不能抓住机会它会失败,没有人知道它。那么,在服务生命周期(哪种方法)中我应该发出sendBroadcast(ImGoingDown)?例如,onDestroy()多久会被调用?
答案 0 :(得分:1)
虽然这里的大多数答案都有助于onDestroy方法,但是您的服务上有许多事件被销毁,您无法进行干预。例如,如果用户强制关闭了您的应用程序,您的服务将被销毁,但不会执行onDestroy。
在一个常见的场景中,当您的服务已经用尽运行时(大多数已知完成),没有其他进程绑定到服务或执行其stopSelf()
时,您的服务将被销毁,并且最常见的,当设备在RAM上运行不足时。
onDestroy将是您可以重新启动它的场景。
作为建议,如果设备由于RAM较低而导致进程中断,请不要立即重启。设置一个Handler或AlarmManager稍后启动它(因此缺少memmomry不会再次执行。)
答案 1 :(得分:0)
您可以在onDestroy()中触发广播。这是服务在被销毁之前收到的最后一次调用。服务生命周期以此调用结束。
答案 2 :(得分:0)
如果您运行的后台服务意味着您必须在后台执行某项操作,则从onDestroy()
发送广播可能不是最佳做法。
请注意,您的服务因为您要运行的任务已完成而被销毁,那么您可能不希望在这种情况下发送广播。你想只在服务被杀的时候发送广播吗?因此,更好的方法是设置boolean
,例如isTaskFinised,如果只返回false
,则onDestroy()
应发送广播。
@Override
public void onDestroy(){
if(!isTaskFinished){
//send a broadcast
}
}