最后我得出结论:
无法为连续任务创建后台服务.如果我真的想要一个服务,我应该启动一个前台服务,用户不断看到一个持久的通知“应用程序正在运行”.无法隐藏此通知.它是由谷歌有意添加的.
是的,还有其他选项,如WorkManager和JobScheduler,但它们确实定期不连续工作.
我想要的是构建一个即时消息应用程序,它使用xmpp或套接字连续连接到服务器.但它需要连续的连接,但我不想使用前台服务,因为它向用户显示一个恼人的通知“应用程序正在运行”.
问题1:Whatsapp和其他即时消息应用程序如何持续连接到服务器但不显示持久通知?他们是如何做到这一点的?
问题2:如果Whatsapp使用FCM进行通知,那么它也适用于那些没有安装playservices的手机,那么Whatsapp通知机制如何运作?
解决方法
https://developer.android.com/training/monitoring-device-state/doze-standby
现在,关于您的用例是,即使应用程序未运行,您也希望接收消息和来电.对于此用例,Android在GoogleIO2016中发布了高优先级FCM消息.它们是高优先级的Push消息,它授予应用程序临时唤醒锁和网络访问权限,与Device的Doze状态无关,或者应用程序恰好位于应用程序待机状态.这允许应用程序对消息做出反应,并以任何方式通知用户即时消息或来电.
我不知道WhatsApp到底是怎么做的,除非我查看他们的代码,但你可以使用FCM高优先级消息来处理你的用例.
有关您的使用案例的更多信息,请在08:30至10:30之间按照以下链接访问GoogleIO2016视频
https://www.youtube.com/watch?v=VC2Hlb22mZM&t=505s
并在此答案的第一个链接上阅读此用例.