为 Android 后台服务设计低功耗 GPS 地理围栏引擎
作者详述了人为错误在管理手机通知设置时带来的挫败感,进而导致安静环境中出现干扰。受此启发,作者开发了一种自动化解决方案,可根据上下文自动调整手机的音频配置文件。现有的自动化工具要么功耗过高,要么在无信号时不可靠。目标是构建一个尊重隐私、驻留于设备本地的服务,自动管理静音、振动和正常模式。在开发地理围栏引擎时,作者选择了 GeofencingClient API 而非持续的位置更新,以节省电量。然而,Android 的 Doze 模式要求实现 ForegroundService,以确保应用在非活跃使用时仍能保持可靠运行。该架构确保应用仅在地理围栏触发时短暂唤醒以执行音频命令。一项关键权衡是优先保证电池效率,而非地理围栏的精确度。作者发现,在城市区域由于信号反射,GPS 表现不可靠,因此需要引入防抖动机制以防止模式频繁误变。同样,AlarmManager 在基于时间的触发中表现不可靠,迫使使用 setExactAndAllowWhileIdle 来处理关键定时事件。由于 SharedPreferences 在管理过渡历史时存在性能问题,建议使用 SQLite 缓存。关于后台 Android 工具的核心建议是:利用操作系统 API(如 GeofencingClient 和 WorkManager),而非与系统限制对抗。开发者应预判边缘情况,例如设备重启或规则冲突,优先确保行为可预测并赢得用户信任。作者强调,真正的效用在于可靠性,而不仅仅是功能数量,并以其应用 Muffle 作为实际演示。