jac*_*cek 28 java android sensor listener
我有一个非常简单的Android应用程序:在活动中我有一个按钮,我启动/停止OrientationListener.但是,在取消注册后,在ddms中我仍然可以看到线程android.hardware.SensorManager $ SensorThread](正在运行).
注册码:
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);
}
Run Code Online (Sandbox Code Playgroud)
和取消注册:
try
{
if (sensorManager != null && sensorEventListener != null)
{
sensorManager.unregisterListener(sensorEventListener,sensor);
running = false;
}
}
catch (Exception e)
{
Log.w(TAG, e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
该unregisterListener()方法确实被执行,但它不会经常杀死传感器线程,这会使电池继续运行和耗尽.几个小时后,我的应用程序列出了20-30%的电池消耗.怎么可能?如何确保传感器未注册?我没有在logcat中得到任何异常或任何错误.我尝试在服务中运行监听器 - 同样的事情.
就我而言,为了解决这个问题,我需要更正用于获取 SensorManager 的上下文。我在一个服务中,我需要通过这种方式获取 SensorManager:
SensorManager sensorManager = (SensorManager) getApplicationContext().getSystemService(SENSOR_SERVICE);
Run Code Online (Sandbox Code Playgroud)
因此,只需验证您是否以正确的方式获取 SensorManager。
| 归档时间: |
|
| 查看次数: |
8020 次 |
| 最近记录: |