如何在后台执行限制中生存

Posted

技术标签:

【中文标题】如何在后台执行限制中生存【英文标题】:How to survive background execution limit 【发布时间】:2020-02-28 20:35:21 【问题描述】:

我心中有一些问题希望有人回答和澄清: 我有后台服务,每秒从后台发送位置坐标并更新另一台设备上的位置,就像在驱动程序客户模型中发生的那样,在后台执行限制下这个应用程序会发生什么?我将如何在这个执行限制中幸存下来,之后我的应用程序的行为会怎样?我需要为此启动前台服务吗?

另外,如果我在此应用程序工作和发送坐标时禁用了该应用程序的位置权限,会发生什么情况?此外,我可以通知用户位置权限被禁用并停止服务吗?

谢谢

【问题讨论】:

【参考方案1】: 如果您需要频繁的位置更新(例如跟踪准确路径,用户正在运行),您肯定需要前台服务。只需向您的服务添加通知并告诉它进入前台,显示所述通知:
startForeground(yourId, yourNotifcation)

如果您需要知道,当用户碰巧在某个区域内/外时,地理围栏是您的最佳选择。比如说,你想知道,他是否离开了火车站。或者在某家商店附近。

如果您只需要不频繁(例如每 15 到 20 分钟或更长时间)更新用户位置,则可以通过 WorkManager 执行此操作

【讨论】:

如果用户在服务运行时从设置中禁用位置权限,我可以通知用户权限被禁用吗? AFAIK 这将终止您的应用进程。 当我禁用权限时,任何对此应用程序的引用都会停止 我不知道有什么方法可以可靠地拦截这个事件(但是我没有尝试,所以也许有)..但是你的进程死亡对用户来说是可见的——而你的前台进程正在运行,它将显示通知。当用户为您的应用禁用地理定位权限时,通知将消失。

以上是关于如何在后台执行限制中生存的主要内容,如果未能解决你的问题,请参考以下文章

如何让iOS设备上App定时执行后台任务(上)

使用 WorkManager 处理需要立刻执行的后台任务

将代码执行移至后台线程的阈值是多少? [关闭]

在后台扩展每个选择查询

应用如何在后台执行

如何使用 Apollo 在后台执行查询?