2012-06-17 28 views
2

在我的应用程序中,我使用光线和接近传感器来检测手机的自付功能,然后在检测完成后取消注册SensorManager。但即使应用程序的CPU使用率仅显示1-2秒的使用情况,电池使用情况也会将我的应用程序显示为否。在名单中的1个应用程序令人担忧。取消注册SensorManager不起作用

我已经使用了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作为每建议,但即使这样也无济于事。尽管调用清理代码,但电池使用量仍然非常高。该应用本身不应该使用太多的电池,因为它只有一个广播接收器和一项活动的非常简单的应用程序,但在活动中,我调用了光线和接近传感器,我怀疑这些会导致电池使用的高峰。不知道为什么。

任何帮助是非常可观的。

+1

请发布一个示例应用程序,演示您的问题。或者,至少在您注销您的'SensorEventListener'的地方发布代码。 – CommonsWare

+0

用上面的代码示例更新了帖子。 –

回答

0

我能够通过正确匹配来解决这个问题,当监听器被注册并且它们被注销时。或许,最初听众在所有呼叫条件(来电,去电,未接电话等)中没有正确注销,因此即使当活动结束时,听众仍在监听事件,从而不必要地消耗电力。

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

借此来注册监听器......那么你的工作unregisterListener

1

只是把这个注册码到主处理器,那么它的工作原理。但我不知道为什么。

Handler mainHandler = new Handler(Looper.getMainLooper()); 
    mainHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      if (mSensorManager != null) { 
       mSensorManager.registerListener(sensorEventListener, mProximity, SensorManager.SENSOR_DELAY_NORMAL); 
      } 
     } 
    }); 
+0

是的,我找到了同样的东西。 –