gpt4 book ai didi

java - SensorEventListener 不会使用 unregisterListener() 方法取消注册

转载 作者:IT老高 更新时间:2023-10-28 21:13:11 24 4
gpt4 key购买 nike

我有一个非常简单的 Android 应用程序:在 Activity 中我有一个按钮,我启动/停止 OrientationListener。但是,注销后,在 ddms 中我仍然可以看到线程 android.hardware.SensorManager$SensorThread] (Running)

注册码:

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0)
{
sensor = sensors.get(0);
running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}

和注销:

try
{
if (sensorManager != null && sensorEventListener != null)
{
sensorManager.unregisterListener(sensorEventListener,sensor);
running = false;
}
}
catch (Exception e)
{
Log.w(TAG, e.getMessage());
}

unregisterListener() 方法确实会被执行,但是它不会经常杀死传感器线程,这会继续运行并耗尽电池。几个小时后,我的应用程序的电量消耗为 20-30%。这怎么可能?如何确保传感器未注册?我在 logcat 中没有任何异常或任何错误。我尝试在服务中运行监听器 - 同样的事情。

最佳答案

就我而言,为了解决这个问题,我需要更正用于获取 SensorManager 的上下文。我在一个服务中,我需要以这种方式获取 SensorManager:

SensorManager sensorManager = (SensorManager) getApplicationContext().getSystemService(SENSOR_SERVICE);

因此,只需证明您获取 SensorManager 的方式是否正确。

关于java - SensorEventListener 不会使用 unregisterListener() 方法取消注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com