手机关机时运行的Android服务会在手机启动时自动启动

时间:2013-09-17 12:44:05

标签: android service

我目前正在开发一种Android电话应用程序,其中包括处理拨打和接听电话的所有SIP信令的服务。

我希望此服务在用户正确登录应用程序时独占启动。但是,我观察到一种不良行为:如果设备在应用程序运行时关闭,则在手机启动后会自动启动该服务。如果在关闭手机时关闭应用程序,则不会发生这种情况。

我一直在读它,但没有回答。有人可以解释为什么会发生这种情况以及如何预防吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

感谢CommonsWare评论,我很快就找到了答案:

  

[...]服务启动的唯一方法是,如果有人启动它,操作系统就不会自行完成。

我是如此盲目地认为操作系统对此负有责任,我没有注意到它是故意进行的,因为这是一个从应用程序的旧版本继承而来的未记录的功能。

有一个BroadcastReceiver正在侦听android.intent.action.BOOT_COMPLETED操作。除了其他方面,此接收器在应用程序未正确关闭时启动时重新启动服务。

感谢CommonsWare的帮助。


更新

在阻止BroadcastReceiver监听BOOT_COMPLETE操作后,我仍然遇到相同的行为。

原因是,当WIFI或数据连接变为活动状态时,此BroadcastReceiver还会侦听连接更改以重新启动SIP服务,仅在应用程序运行时。应用程序关闭或未关闭的应用程序存储在应用程序首选项中,但在应用程序运行时关闭手机时未正确设置此值。

这就是为什么服务在启动时仍然不需要启动的原因:因为BroadcastReceiver在启动时检测到了android.net.conn.CONNECTIVITY_CHANGE,并且偏好告诉应用程序仍在运行或已经退出但没有正确更新。< / p>