Android Oreo(> 25)不再鼓励后台服务.即使应用程序关闭,我希望套接字在聊天应用程序中保持连接状态.如何实现对android 26的新更改?
有人说,使用JobIntentService
有人说,使用JobService
有人说,使用JobScheduler
有人说,开始服务作为前台服务
任何帮助,将不胜感激.
lel*_*man 14
我在聊天应用程序上遇到了完全相同的问题,所以我知道你的痛苦.我们的结论是:
如果您需要向没有连接的用户发送消息,请不要保持连接24/7,请通过Firebase发送推送消息.
如果你想在后台保持连接活动,你将面临很多问题.第一个针对Oreo的是,如果您的应用程序处于后台(此上下文中"背景"的定义在此处),则除了小时间窗口之外不允许运行.
你绝对可以使用JobScheduler运行周期任务,他们不会在精确的时间间隔或次数,以减少电池的使用(这是好的)被执行,但它不会帮助您保持连接活着.充其量,您可以使用JobScheduler定期从您的服务器拉取消息.为了使用JobScheduler你需要创建一个JobService类.
JobIntentService是支持库API 26中引入的新类.这是补发IntentService,它将作为一个运行JobService在Android API 26+和作为Service(类似于IntentService在这个意义上,它会在后台线程中执行代码)在旧的API.在奥利奥,它的后台执行仍然是有限的,所以它不会帮助你保持连接活着.
使用前景Service可以真正帮助您降低进程被杀的可能性,但是,您需要显示永久通知.对于聊天应用来说,这听起来不是一个好方法.
如果你仍然认为有一个24/7连接存活是一个可行的选择,你还需要考虑打盹模式.您可以要求用户将您的应用程序列入白名单,即使在打盹模式下也可以运行,但您应该有充分的理由这样做.再次,您将面临Oreo中的其他bg执行限制.
您将面临的另一个问题是其他应用程序.有资源管理应用程序将积极杀死bg中的其他应用程序,以减少内存和电池使用.例如,我诅咒了这一点.
另一个问题是由android创建的.当系统内存不足时,它将开始终止bg中的应用程序进程.有一个命令,他们被杀了,如果我没记错的话,应该考虑到上次是fg和当前的内存使用情况.不是最糟糕的问题,但它仍然发生.
然后,如果我仍然没有说服你放弃永久连接的想法,那么让我与你分享你将面临的另一个问题.一些供应商在杀死bg进程时实施了非常激进的策略,因此他们的电池将持续更长时间.例如,小米.
最后提示,不相关,但我们花了一段时间才弄明白,所以我要分享它.如果用户从力站设置你的应用程序,你的应用程序是死的(即"停止状态"),直到用户主动再次启动它,它甚至不会收到火力地堡推送消息.
| 归档时间: |
|
| 查看次数: |
2243 次 |
| 最近记录: |