專案實作指南針功能時,需要註冊 Sensor Listener
關於 Sensor 的生命週期
我們通常會在 onResume 時開始監聽
但在 onPause 時就取消
以免太過消耗電力
但不知道為什麼我的 unregisterListener 一直都無效
我建立了一個 SensorHelper 的類來幫我,註冊、反註冊、取值計算…等工作
然後在 onPause 反註冊
結果無效
onSensorChanged 依舊被不斷調用
google 找了許多中英文的資訊,皆無有效解決方案
> Android SensorManager unregisterListener 无效的原因及其解决方法
> Unregistering SensorManager doesn’t work
> How to unregister a listener from a sensor after stopping the service?
> SensorEventListener not unregistering itself
> Android sensor listener does not get unregistered or sensor still retrieves values
> SensorEventListener doesn’t get unregistered with unregisterListener() method
> Android的SensorManager无法有效取消注册侦听器
最後我猜測是否是物件指向的關係導致
所以就乾脆在 Linstener 中反註冊,如下
@Override public void onSensorChanged(SensorEvent event) { if (isNuregisterSensor) { sensorHelper.getmSensorManager() .unregisterListener(this); Log.d("UnregisterSensor"); return; } currentDegree = sensorHelper.getDegree(event); Log.d("degree = " + currentDegree); }
其中的 isUnregisterSensor 會在 onPause 中設為 ture
此法成功解決問題
至於有沒有另外的解法,就還要再研究了
end