打开钩子 这发生在一个安静的星期五Jumu'ah祈祷。
伊玛目刚刚到达克乌特巴赫最庄严的部分,当时一个高高的,执着的铃声在整个大厅中呼应.
人头转过身来,悄悄地说起话来,责任人冲去压制他们的装置,只好轻轻地摔倒在他们的匆忙中.
我坐在那里,为他们感到羞愧, 确切地知道沉没的感觉。
这是现代数字时代的普遍经验:我们有礼貌的意图与我们实际有能力管理我们在公共场所的电话状态之间的差距。
问题 我们生活在一个不断通知的世界中,然而,我们缺乏一种标准的方法来根据我们的实际环境来管理我们的装置。
Android提供和,但这些是反应性的工具,需要人工输入.
我尝试了使用标准的基于警报的触发器,但是它们缺乏我所需要的空间意识.
如果我在办公室,我要我的手机震动。
如果我在家,我要它恢复正常。
如果我在诊所,我需要它安静。
多数现有解决方案都依赖于重的全球定位系统投票,这在数小时内使电池耗尽.
它们将定位服务视为协调数据的原始流而不是基于国家的触发器。
我想要的东西 完全在背景中运作, 幸存的系统再起, 运行时没有不断排出 用户的电池寿命。
摩擦不仅仅是关于沉默, 而是关于必须记住切换剖面的认知负荷。
我希望我的手机能自主可靠地处理上下文的切换,而不会成为蓄电池的噩梦.
技术决定/执行情况 为了解决这个问题,我放弃了人工投票,在Google Play Services的 API 内采用了这个位置.
之所以决定用这个来代替原始更新,是因为电池的效率。
推重提升到OS一级.
它使用Wi-Fi,细胞塔,和GPS数据的组合,系统优化后,只有在过渡边界被跨越时才能唤醒我的应用.
这比建立每隔几秒钟起火的习惯要高得多的节能.
然而,要做到这一点,需要一个强有力的结构。
我需要确保我作为满足Android背景执行限制而执行的背景工作者,即使申请程序被杀死,也能正确处理. kotlin val 地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平地平 FLAG UPDATE CURENT 或 未决 intent.FLAG IMMUTUTAL) 地缘 CULENT.adGeofences(地缘请求,待决 intent) 通过杠杆作用,我把触发逻辑从应用流程中分离出来.
当地缘边界被跨越时,OS向我发出一个意图,然后它唤醒了切换状态.
这一架构至关重要。
它确保即使OS积极回收内存,触发器仍然活性,因为注册由Google Play Services进程所持有,而不是我的.
我特别选择遵守现代的Android安全标准, 防止其他应用程序劫持额外意图, 让你惊讶的是什么,你会做不同的 我没想到的是Android设备进入"多泽"模式时 GPS的异常行为 我最初假设,如果我注册了地栅, 它会以高精度发射,不管设备状态如何。
我错了 在某些制造商上,主动进取的电池优化会抑制地峡的过渡,直到用户手动将屏幕唤醒,有效挫败了自动无声配置的目的.
我花了三个星期去调试 为什么我的测试设备不会在口袋里触发"出局"事件 原来是T