无法正确释放 PowerManager.WakeLock
Can't correctly release PowerManager.WakeLock
我在 Activity
中将 PowerManager.WakeLock
用于 Sensor.TYPE_LIGHT
。
它运行良好,但是当我 closing/went 到其他 Activity
SensorEventListener
时,如果传感器发生变化,请继续转动 on/off 屏幕。
代码示例
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
SensorEventListener
接口方法
@Override
public void onSensorChanged(SensorEvent event) {
float[] lux = event.values;
if (lux[0] <= 200) {
mWakeLock.acquire();
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}
SensorManager
听众
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLightSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this, mLightSensor);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
那么如何正确释放和禁用WakeLock
。提前致谢。
我的错误是使用 SensorEventListener
。可能它是重复的 WakeLock.acquire()
并且每次都调用它。关键是在onCreate()
获取,在onDestroy()
释放
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
mWakeLock.acquire();
}
@Override
protected void onDestroy() {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
super.onDestroy();
}
我在 Activity
中将 PowerManager.WakeLock
用于 Sensor.TYPE_LIGHT
。
它运行良好,但是当我 closing/went 到其他 Activity
SensorEventListener
时,如果传感器发生变化,请继续转动 on/off 屏幕。
代码示例
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
SensorEventListener
接口方法
@Override
public void onSensorChanged(SensorEvent event) {
float[] lux = event.values;
if (lux[0] <= 200) {
mWakeLock.acquire();
} else {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
}
SensorManager
听众
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLightSensor, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this, mLightSensor);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
}
那么如何正确释放和禁用WakeLock
。提前致谢。
我的错误是使用 SensorEventListener
。可能它是重复的 WakeLock.acquire()
并且每次都调用它。关键是在onCreate()
获取,在onDestroy()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PowerManager mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "tag");
mWakeLock.acquire();
}
@Override
protected void onDestroy() {
if (mWakeLock.isHeld()) {
mWakeLock.release();
}
super.onDestroy();
}