SensorEventListener没有得到取消注册unregisterListener()方法方法、SensorEventListener、unregisterListener

2023-09-05 23:06:47 作者:多么想拥有祢

我有很简单的Andr​​oid应用程序:在活动我有一个按钮,我开始/停止OrientationListener。然而,注销后​​,在DDMS我仍然可以看到该线程的 android.hardware.SensorManager $ SensorThread](运行)的。

I have very simple Android app: in activity I have a button and I start/stop the OrientationListener. However, after unregistering it, in ddms I can still see the thread android.hardware.SensorManager$SensorThread] (Running).

注册code:

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0)
{
    sensor = sensors.get(0);
    running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}

和注销:

try
{
    if (sensorManager != null && sensorEventListener != null)
    {
        sensorManager.unregisterListener(sensorEventListener,sensor);
        running = false;
    }
}
catch (Exception e)
{
    Log.w(TAG, e.getMessage());
}

unregisterListener()方法得到执行,但它不会杀死传感器线程很多时候,这使运行和排水电池。几个小时后,我的应用程序都列出了20-30%的电池消耗。这怎么可能?我如何才能确保,该传感器被注销?我没有得到任何异常,也没有任何错误,在logcat中。我试图运行的服务监听器 - 同样的事情

The unregisterListener() method does get executed, however it doesn't kill the sensors thread very often, which keeps running and draining the battery. After few hours my app is listed with 20-30% battery drain. How is that possible? How can I make sure, that the sensor gets unregistered? I don't get any exceptions nor any errors in the logcat. I tried running the listener in the Service - same thing.

推荐答案

您没有表现出足够的code告诉是肯定的,但也许你的测试

You don't show enough code to tell for sure, but perhaps your test

if (sensorManager != null && sensorEventListener != null)

简直是不准确的。也就是说,的SensorManager sensorEventListener 可以是当你仍然注册为侦听。

simply is not accurate. That is, sensorManager or sensorEventListener may be null when you are still registered as listening.