2

私のアプリでは、光センサーと近接センサーを使用して携帯電話のポケット機能を検出し、検出が完了したら SensorManager の登録を解除しています。しかし、アプリによる CPU 使用率が 1 ~ 2 秒しか表示されない場合でも、バッテリーの使用率は常にアプリに no と表示されます。心配なリストの 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 に関する 1 つの投稿からの 1 つの提案に従って、sensorManager = null を設定していますが、それでも役に立ちません。クリーンアップ コードを呼び出したにもかかわらず、バッテリーの使用量は依然として非常に高くなっています。アプリ自体は、1 つのブロードキャスト レシーバーと 1 つのアクティビティしかない非常にシンプルなアプリであるため、多くのバッテリーを使用するべきではありませんが、アクティビティ内で光センサーと近接センサーを呼び出すと、それらがバッテリー使用量の急増を引き起こしているのではないかと思います。理由はわかりませんが。

どんな助けも非常に高く評価されます。

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

リスナーが登録されたときと登録解除されたときを正しく一致させることで、これを解決できました。おそらく、最初はリスナーがすべての Call 条件 (着信、発信、不在着信など) で適切に登録解除されていなかったため、アクティビティが閉じられたときでも、リスナーはイベントをリッスンしていたため、不必要に電力を消費していました。

于 2012-06-23T14:42:44.647 に答える