为Android背景服务设计一个低能GPS Geofencing引擎

2026年8月29日1 次浏览来源:Dev.to阅读原文

房间里的气氛很浓密,每声小声回响。

我坐在一个当地社区中心的第三排 周五的祷告会上 我的头在回想中鞠躬 突然,一个高调的合成铃声 打破了沉默。

我的口袋剧烈震动 使我的胸口充满了焦虑 我匆匆忙忙地想让它安静下来,但损害已经发生;十几个头朝我的方向转了.

我不仅感到羞愧;我对自己忘却了简单的任务而忘却了无声的开关感到了上千回的挫折.

这不是孤立的事件。

我发现自己经常陷入人类错误的循环之中。

我将到达办公室, 启动一个深工作短跑, 并意识到两个小时后, 我的电话一直发出通知 通过三次单独的会议。

然后,我会离开办公室 并忘记打开铃声回来, 失踪的紧急电话 从家里整个晚上。

摩擦并不在硬件中;它期望人类能够完美地管理一台每天与数百次互动的状态机器.

我意识到我的手机足够聪明 能够追踪我的位置,计算祷告时间, 同步我的日程安排, 大多数现有的自动化工具要么太重,在数小时内排出电池,要么依赖于云基触发器,而这种触发器在我失去信号的时刻就失效了.

我想在设备上生活的东西,尊重用户的隐私,并处理"静","静"和"正常"状态之间的过渡,而不需要我触摸屏幕.

目标很简单:构建一个关注世界,自动调整手机音量的背景服务.

我需要一个可以处理地圈、日历事件和时间触发的架构,而不把设备变成空间加热器。

当我开始为Muffle建造地缘引擎时, 我很快意识到那是电池灾难的秘方。

相反,我从Google Play Services 向API转投。

这个API是专为卸载重载到系统而建造的.

通过定义一组物体,我可将监测工作下放到操作系统一级。

操作系统使用Wi-Fi,细胞塔和GPS的组合来跟踪设备,分批事件,所以我的应用代码只有在一个边界被跨越时才会被唤醒.

然而,由于Android的多泽模式变得多有攻击性,标准本身还不够.

如果这个系统毁了我的程序, 接收地球栅栏转换的广播机可能永远不会开火。

我不得不实施一个保持活性 即使应用程序被刷去。

挑战在于确保服务不会消耗过多的记忆,同时保持对这些过渡的反应.

我这样安排互动: Kotlin val 地峡请求=地峡请求.

Builder (. ). app { set Initial Trigger (Geofencing request.

INITIAL TRIGGER ENTEER) 添加 Geofences (地物列表)}. building () Geofencing Client. addGeoofences (地地物请求,地物连接). add OnSuccess listers { * 已成功注册 / }.addOn failure listener {/ 处理注册错误 */ } 通过保持逻辑轻量级,我确保当一个过渡发生时,应用程序会醒来,执行命令,然后几乎立即回睡.

关键的技术取舍是在准确性和电池寿命之间。

我非常倾向于提高电池的效率, 承认在地峡触发器中50米的相差 是一个公平的价格 对于一个持续一整天的装置。

我曾经防止一个用户坐在边界边缘时快速起火, 否则会像闪光灯一样闪烁声音。

在这个过程中,我最惊讶的是GPS在高密度的城市环境中是多么不可靠。

我原以为如果我画出一个紧圆圈

分享