4

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

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

我一直在阅读它,但没有答案出现。谁能解释为什么会发生这种情况以及如何防止它?

先感谢您。

4

1 回答 1

1

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

[...] 服务启动的唯一方式是有人启动它,而操作系统不会自行启动。

以为操作系统对此负责,我感到非常盲目,以至于我没有注意到它是故意完成的,因为它是从该应用程序的先前版本继承的未记录功能。

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

感谢 CommonsWare 的帮助。


更新

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

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

这就是为什么该服务仍然在启动时意外启动的原因:因为 BroadcastReceiver 在启动时检测到一个 android.net.conn.CONNECTIVITY_CHANGE 并且告诉应用程序是否仍在运行或已退出的首选项没有正确更新。

于 2013-09-17T13:47:25.287 回答