Изменение ориентации аннулирует ссылку на SensorManager

Я делаю приложение, которое подключает слушателей как к локации, так и к сенсору, чтобы потом записывать изменения из них в файл.

Что странно, так это то, что в некоторых случаях одним из телефонов, использующих приложение, было принудительное закрытие, которое я сузил до изменения ориентации: если телефон изменил ориентацию во время записи, атрибут SensorManager, который я сохранял внутри действия как mSensorManager, был бы установить на ноль.

Это приводит к моему вопросу: не следует ли хранить ссылку на SensorManager, потому что это плохой выбор дизайна? Или все в порядке, и я должен просто проверить, является ли ссылка нулевой, прежде чем использовать его?

РЕДАКТИРОВАТЬ: две вещи, чтобы добавить:

  1. Я обнаружил, что не только атрибуты акселерометра и магнитометра были также аннулированы (что имело смысл), но также и менеджер местоположения (который не вносит больших изменений, поскольку он не имеет ничего общего с определением ориентации);

  2. Должен ли я хранить эти атрибуты внутри чего-то другого, кроме действия, которое не аннулирует ссылки при изменении ориентации?

Что это сделало для меня: Исправление экземпляра слушателя, менеджера и датчика должно быть выполнено в жизненном цикле действия. Тогда единственной проблемой была блокировка, которая была разрушена, но мне нужно было выдерживать изменения ориентации. Я изменил его, чтобы получить в течение жизненного цикла деятельности, а также, хотя и в другой фазе.

2 ответа

Решение

Что это сделало для меня: Исправление экземпляра слушателя, менеджера и датчика должно быть выполнено в жизненном цикле действия. Тогда единственной проблемой была блокировка, которая была разрушена, но мне нужно было выдерживать изменения ориентации. Я изменил его, чтобы получить в течение жизненного цикла деятельности, а также, хотя и в другой фазе.

  1. попробуйте после добавления этой строки внутри тега активности в манифесте

     android:configChanges="orientation|keyboardHidden"
    

    Я думаю, что это сводит на нет, потому что при изменении ориентации onCreate призван к этой деятельности

  2. Попробуйте сохранить значения, используя общие настройки
Другие вопросы по тегам