Android 方向更改使SensorManager参考无效

Android 方向更改使SensorManager参考无效,android,android-sensors,android-location,sensormanager,Android,Android Sensors,Android Location,Sensormanager,我正在制作一个附加位置和传感器侦听器的应用程序,这样它就可以将它们的更改记录到一个文件中 奇怪的是,在某些情况下,使用该应用程序的其中一部手机被强制关闭,我将其缩小为方向更改:如果手机在录制过程中更改了方向,则我在活动中存储为“MSSensorManager”的SensorManager属性将设置为null 这就引出了我的问题:我是否应该不存储SensorManager引用,因为它是一个糟糕的设计选择?还是可以,我应该在使用它之前检查引用是否为null 编辑:要添加两件事: 我发现不仅加速度计和

我正在制作一个附加位置和传感器侦听器的应用程序,这样它就可以将它们的更改记录到一个文件中

奇怪的是,在某些情况下,使用该应用程序的其中一部手机被强制关闭,我将其缩小为方向更改:如果手机在录制过程中更改了方向,则我在活动中存储为“MSSensorManager”的SensorManager属性将设置为null

这就引出了我的问题:我是否应该不存储SensorManager引用,因为它是一个糟糕的设计选择?还是可以,我应该在使用它之前检查引用是否为null

编辑:要添加两件事:

  • 我发现不仅加速度计和磁强计的属性也被置零(这是有意义的),而且 locationmanager(它没有做太多更改,因为它已经 与方向确定无关)

  • 我是否应该将这些属性存储在活动以外的不会使方向上的引用无效的内容中 换衣服


  • 这对我有什么好处: 更正要在活动生命周期内完成的侦听器、管理器和传感器实例化。然后唯一的问题是尾流锁,它被破坏了,但我需要通过方向的变化来保持。我将其更改为在活动生命周期期间获得,尽管是在不同的阶段

  • 在清单中的活动标记内添加此行后重试

     android:configChanges="orientation|keyboardHidden"
    
    我猜它是无效的,因为在方向上更改onCreate 他呼吁开展这项活动

  • 尝试使用

  • 它为我做了什么:纠正了监听器、管理器和传感器实例化在活动生命周期内完成的问题。然后唯一的问题是尾流锁,它被破坏了,但我需要通过方向的变化来保持。我也将其更改为在活动生命周期中获取,尽管是在不同的阶段。

    我没有听说共享首选项,但名称暗示这些首选项是用于系统对象的,而不是用于应用程序设置。不管怎样,我的“onCreate”方法可能会实例化系统对象,这些对象可能会被推到执行路径的下一步,也许我会尝试一下并查看保存的实例包。包中没有任何内容,但您的帖子为我指明了正确的方向。我开始在onCreate方法中实例化sensor和manager对象,但后来由于屏幕锁定对象而导致切换按钮爆炸。这暗示了我同时丢失了wakeLock变量,这是一个完全不同的问题。也许它应该是静态的?我觉得你应该因为引导我走上正确的道路而得到赞扬,但答案不是什么解决了我的问题,而是意识到方向的改变会触发活动的重新开始。我们应该怎么做?答案就在答案的第一点,添加android:configChanges。如果它引导你朝着正确的方向前进,你可以投票支持答案