Android TYPE_SIGNIFICANT_MOTION传感器48小时后返回null问题问询
问题描述
我的Transitions API方案通常在前一两天正常运行,但之后便停止接收更新。经排查发现,需保持SIGNIFICANT_MOTION传感器处于激活状态,才能唤醒相关传感器以维持Transitions API整体运行。
我实现了一个监听器来监测SIGNIFICANT_MOTION传感器的启用状态:
try { boolean request = sensorManager.requestTriggerSensor(triggerEventListener, sensor); Timber.e("Transitions API is working. If returns false - device is STILL"); } catch (IllegalArgumentException exception) { sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION); Timber.e("SensorManager - " + sensorManager + ", sensor - " + sensor); //TODO: Later delete }
如代码所示,每当触发异常时我会重新初始化传感器以避免后续抛出异常,但日志显示此时sensor为null。
该传感器在前一天能正常返回有效值,但运行约48小时后变为null,且除重启设备外无其他解决办法。
核心问题:为何sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION)在前一天返回有效值,48小时后却返回null并停止工作?这是Transitions API失效的根本原因。
补充信息:
- 设备:Google Pixel 3A
- 系统:Android 12
- 该问题疑似与Google官方记录的Android 12下传感器服务异常问题相关,相关记录显示部分Pixel设备在长时间运行后会出现传感器服务崩溃,导致
getDefaultSensor返回null,仅能通过重启恢复。
问题分析与解决建议
传感器服务资源泄漏/崩溃
Android 12的SensorService在长时间运行后可能出现资源泄漏或进程崩溃,导致系统无法正确返回传感器实例。这是Pixel 3A等设备在Android 12上的已知问题,当传感器服务异常后,即使重新获取SensorManager,也无法正常初始化传感器,必须重启设备恢复服务。异常处理逻辑的局限性
当前的异常捕获仅处理IllegalArgumentException,但传感器服务崩溃可能引发其他未捕获的异常,且重新初始化的时机仅在触发异常时,无法主动检测传感器服务的存活状态。临时修复方案
- 增加传感器可用性检测:在每次使用传感器前,主动检查
sensor是否为null,若为null,尝试多次重新获取(比如间隔1-2秒重试3次),若仍失败则提示用户重启设备。 - 监听系统广播:注册
ACTION_BOOT_COMPLETED广播,在设备重启后自动重新初始化传感器监听器,恢复Transitions API的运行。 - 后台保活优化:避免不必要的传感器请求频繁触发,减少传感器服务的负载,降低崩溃概率。
- 长期解决方案
等待Google推送系统更新修复该传感器服务的底层bug,或者考虑降级到Android 11(若业务允许),避免该版本特有的传感器服务问题。
内容的提问来源于stack exchange,提问作者MaaAn13
相关产品推荐
相关产品推荐

