在我的应用程序中,我使用光线和接近感应器来检测手机的口袋功能,然后在它们的检测完成后注销SensorManager。但是,即使应用程序的CPU使用率仅显示1-2秒的使用率,电池使用率也总是将我的应用程序显示为列表中排名第一的应用程序,这令人担忧。
我使用了SensorManager.unRegisterListener,还设置了SensorManager = null,但情况仍然是一样的。
我读到,由于一些错误,传感器没有正确取消注册。有没有什么好的方法来正确处理传感器?
请指点一下。Omkar Ghaisas
使用app中的代码示例进行了更新-
@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,但即使这样也无济于事。尽管调用了清理代码,但电池使用率仍然很高。应用程序本身不应该使用太多的电池,因为它是一个非常简单的应用程序,只有一个广播接收器和一个活动,但在活动中,我调用了光和接近传感器,我怀疑这些是导致电池使用量激增的原因。不过,我不知道为什么。
任何帮助都是非常值得感谢的。
发布于 2012-06-23 22:42:45
我能够通过正确匹配注册和注销监听器的时间来解决这个问题。也许,最初监听器在所有呼叫条件(来电、呼出、未接来电等)中都没有正确取消注册,因此即使活动关闭,监听器仍在监听事件,从而不必要地消耗电力。
发布于 2013-07-15 22:35:41
mSensorManager.registerListener(YourListener.this, mSensorManager
.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),
SensorManager.SENSOR_DELAY_NORMAL);用这个来注册你的监听器。然后运行你的unregisterListener
发布于 2016-04-11 11:12:47
只需将此寄存器代码放入主处理程序中,它就可以工作了。但我不知道为什么。
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);
}
}
});https://stackoverflow.com/questions/11071035
复制相似问题