首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注销SensorManager不起作用

注销SensorManager不起作用
EN

Stack Overflow用户
提问于 2012-06-17 19:41:09
回答 3查看 3.2K关注 0票数 2

在我的应用程序中,我使用光线和接近感应器来检测手机的口袋功能,然后在它们的检测完成后注销SensorManager。但是,即使应用程序的CPU使用率仅显示1-2秒的使用率,电池使用率也总是将我的应用程序显示为列表中排名第一的应用程序,这令人担忧。

我使用了SensorManager.unRegisterListener,还设置了SensorManager = null,但情况仍然是一样的。

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

请指点一下。Omkar Ghaisas

使用app中的代码示例进行了更新-

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

任何帮助都是非常值得感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-23 22:42:45

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

票数 0
EN

Stack Overflow用户

发布于 2013-07-15 22:35:41

代码语言:javascript
复制
mSensorManager.registerListener(YourListener.this, mSensorManager
                    .getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),
                    SensorManager.SENSOR_DELAY_NORMAL);

用这个来注册你的监听器。然后运行你的unregisterListener

票数 1
EN

Stack Overflow用户

发布于 2016-04-11 11:12:47

只需将此寄存器代码放入主处理程序中,它就可以工作了。但我不知道为什么。

代码语言:javascript
复制
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);
            }
        }
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11071035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档