專案實作指南針功能時,需要註冊 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

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(0) 人氣()