取消注册SensorManager不起作用

时间:2012-06-17 11:41:09

标签: android android-sensors sensormanager

在我的应用程序中,我使用灯光和接近传感器来检测手机的口袋功能,然后在检测完成后取消注册SensorManager。但即使应用程序的CPU使用率仅显示1-2秒,电池使用情况也始终显示我的应用程序为否。列表中的1个应用程序令人担忧。

我使用过SensorManager.unRegisterListener并设置了SensorManager = null,但情况仍然相同。

我已经读过,由于某些错误,传感器未正确注销。有没有正确处理传感器的好方法?

请指导。 Omkar Ghaisas

更新了应用中的代码示例 -

@Override
protected void onPause()
{
    super.onPause();
    unHookReceiver();
}

private void unHookReceiver()
{
    if (r != null)
    {
        unregisterReceiver(r);
        if(GetProximityPreference("EnableReceiveByProximity"))
        {
            mySensorManager.unregisterListener(proximitySensorEventListener);
            mySensorManager.unregisterListener(lightSensorEventListener);
            mySensorManager = null;
            FileUtils.appendLog(FileUtils.GetCurrentDateTime() + " Power Consumption Log End");
            FileUtils.appendLog("------------------------------------------------");
        }
        r = null;
    }
}

我也根据stackpverflow上的一篇帖子中的一个建议设置了sensorManager = null,但即便如此也无济于事。尽管调用了清理代码,但电池使用率仍然非常高。该应用程序本身不应该使用太多电池作为一个非常简单的应用程序,只有一个广播接收器和一个活动,但在活动中,我调用光和接近传感器,我怀疑这些导致电池使用量的峰值。不知道为什么会这样。

任何帮助都非常值得赞赏。

2 个答案:

答案 0 :(得分:1)

mSensorManager.registerListener(YourListener.this, mSensorManager
                    .getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),
                    SensorManager.SENSOR_DELAY_NORMAL);

以此来注册您的听众...然后运行您的unregisterListener

答案 1 :(得分:0)

我能够通过在注册听众时和未注册时正确匹配来解决这个问题。也许,最初听众没有在所有呼叫条件(来电,拨出电话,未接来电等)中正确注销,因此即使活动关闭,听众仍在监听事件,从而不必要地消耗电力。