我正在用SensorManager编写应用程序,我在改变屏幕方向后注销SensorManager有问题,我的意思是它不起作用。
我是这样创建的:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (null == mSensorManager) {
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometr = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometr, SensorManager.SENSOR_DELAY_NORMAL);
}
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
}
这就是取消注册的方法:
mSensorManager.unregisterListener(this, mAccelerometr);
mSensorManager = null;
当屏幕方向没有改变,sensorManager被成功注销,onSensorChanged方法不再执行时,它可以正常工作。但如果我改变方向尽管我注销了sensorManager, onSensorChanged仍然是活动的。你知道怎么解决这个问题吗?
你应该在onResume和onPause中注册和取消注册:
@Override
protected void onResume() {
super.onResume();
if (null == mSensorManager) {
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometr = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometr, SensorManager.SENSOR_DELAY_NORMAL);
}
}
@Override
protected void onPause() {
super.onPause();
if (null != mSensorManager) {
mSensorManager.unregisterListener(this, mAccelerometr);
mSensorManager = null;
}
}
见http://developer.android.com/training/basics/activity-lifecycle/pausing.html