У меня очень простое приложение для Android: в действии у меня есть кнопка, и я запускаю/останавливаю OrientationListener. Однако, после его регистрации, в ddms я все еще вижу поток android.hardware.SensorManager $SensorThread] (Running).
Код регистрации:
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. Я попробовал запустить слушателя в Сервисе - то же самое.