2

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

我已经使用了 SensorManager.unRegisterListener 并且还设置了 SensorManager = null,但情况还是一样。

我读过,由于一些错误,传感器没有正确取消注册。有什么好方法可以正确处理传感器吗?

请指导。奥姆卡尔·盖萨斯

使用来自应用程序的代码示例进行了更新 -

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

任何帮助都是非常可观的。

4

3 回答 3

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

拿这个来注册你的听众......然后工作你的unregisterListener

于 2013-07-15T14:35:40.980 回答
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);
            }
        }
    });
于 2016-04-11T03:12:46.873 回答
0

我能够通过正确匹配侦听器的注册时间和注销时间来解决此问题。也许,最初侦听器没有在所有呼叫条件(来电、去电、未接电话等)中正确取消注册,因此即使活动关闭,侦听器仍在侦听事件,从而不必要地消耗功率。

于 2012-06-23T14:42:44.647 回答