SensorEventListener未使用unregisterListener()方法取消注册

jac*_*cek 28 java android sensor listener

我有一个非常简单的Android应用程序:在活动中我有一个按钮,我启动/停止OrientationListener.但是,在取消注册后,在ddms中我仍然可以看到线程android.hardware.SensorManager $ SensorThread](正在运行).

注册码:

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);
}
Run Code Online (Sandbox Code Playgroud)

和取消注册:

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

unregisterListener()方法确实被执行,但它不会经常杀死传感器线程,这会使电池继续运行和耗尽.几个小时后,我的应用程序列出了20-30%的电池消耗.怎么可能?如何确保传感器未注册?我没有在logcat中得到任何异常或任何错误.我尝试在服务中运行监听器 - 同样的事情.

Vit*_*aga 5

就我而言,为了解决这个问题,我需要更正用于获取 SensorManager 的上下文。我在一个服务中,我需要通过这种方式获取 SensorManager:

SensorManager sensorManager = (SensorManager) getApplicationContext().getSystemService(SENSOR_SERVICE);
Run Code Online (Sandbox Code Playgroud)

因此,只需验证您是否以正确的方式获取 SensorManager。


Mob*_*ius 1

可能是范围问题。尝试在注册和取消注册时记录sensorEventListener 和sensor 的值。(.toString()) 以确保它们相同。