Изменение ориентации аннулирует ссылку на SensorManager
Я делаю приложение, которое подключает слушателей как к локации, так и к сенсору, чтобы потом записывать изменения из них в файл.
Что странно, так это то, что в некоторых случаях одним из телефонов, использующих приложение, было принудительное закрытие, которое я сузил до изменения ориентации: если телефон изменил ориентацию во время записи, атрибут SensorManager, который я сохранял внутри действия как mSensorManager, был бы установить на ноль.
Это приводит к моему вопросу: не следует ли хранить ссылку на SensorManager, потому что это плохой выбор дизайна? Или все в порядке, и я должен просто проверить, является ли ссылка нулевой, прежде чем использовать его?
РЕДАКТИРОВАТЬ: две вещи, чтобы добавить:
Я обнаружил, что не только атрибуты акселерометра и магнитометра были также аннулированы (что имело смысл), но также и менеджер местоположения (который не вносит больших изменений, поскольку он не имеет ничего общего с определением ориентации);
Должен ли я хранить эти атрибуты внутри чего-то другого, кроме действия, которое не аннулирует ссылки при изменении ориентации?
Что это сделало для меня: Исправление экземпляра слушателя, менеджера и датчика должно быть выполнено в жизненном цикле действия. Тогда единственной проблемой была блокировка, которая была разрушена, но мне нужно было выдерживать изменения ориентации. Я изменил его, чтобы получить в течение жизненного цикла деятельности, а также, хотя и в другой фазе.
2 ответа
Что это сделало для меня: Исправление экземпляра слушателя, менеджера и датчика должно быть выполнено в жизненном цикле действия. Тогда единственной проблемой была блокировка, которая была разрушена, но мне нужно было выдерживать изменения ориентации. Я изменил его, чтобы получить в течение жизненного цикла деятельности, а также, хотя и в другой фазе.
попробуйте после добавления этой строки внутри тега активности в манифесте
android:configChanges="orientation|keyboardHidden"
Я думаю, что это сводит на нет, потому что при изменении ориентации
onCreate
призван к этой деятельности- Попробуйте сохранить значения, используя общие настройки