我目前正在开发一种Android电话应用程序,其中包括处理拨打和接听电话的所有SIP信令的服务。
我希望此服务在用户正确登录应用程序时独占启动。但是,我观察到一种不良行为:如果设备在应用程序运行时关闭,则在手机启动后会自动启动该服务。如果在关闭手机时关闭应用程序,则不会发生这种情况。
我一直在读它,但没有回答。有人可以解释为什么会发生这种情况以及如何预防吗?
提前谢谢。
答案 0 :(得分:1)
感谢CommonsWare评论,我很快就找到了答案:
[...]服务启动的唯一方法是,如果有人启动它,操作系统就不会自行完成。
我是如此盲目地认为操作系统对此负有责任,我没有注意到它是故意进行的,因为这是一个从应用程序的旧版本继承而来的未记录的功能。
有一个BroadcastReceiver正在侦听android.intent.action.BOOT_COMPLETED操作。除了其他方面,此接收器在应用程序未正确关闭时启动时重新启动服务。
感谢CommonsWare的帮助。
更新
在阻止BroadcastReceiver监听BOOT_COMPLETE操作后,我仍然遇到相同的行为。
原因是,当WIFI或数据连接变为活动状态时,此BroadcastReceiver还会侦听连接更改以重新启动SIP服务,仅在应用程序运行时。应用程序关闭或未关闭的应用程序存储在应用程序首选项中,但在应用程序运行时关闭手机时未正确设置此值。
这就是为什么服务在启动时仍然不需要启动的原因:因为BroadcastReceiver在启动时检测到了android.net.conn.CONNECTIVITY_CHANGE,并且偏好告诉应用程序仍在运行或已经退出但没有正确更新。< / p>