Długo działająca usługa zużywa dużo baterii

Opracowałem aplikację, a niektórzy ludzie narzekają, że zajmuje zbyt dużo baterii, jest to drugi najbardziej zużywający się proces po ekranie. Jednak w niektórych urządzeniach nie zużywa tak dużo baterii.

Cała praca, którą wykonuje moja aplikacja, polega na usługach. Usługa jest lepka i działa cały czas (system Android może ją zabić, gdy ma niskie zasoby lub wstrzymać ją, gdy urządzenie przejdzie w stan uśpienia), ma słuchacza akcelerometru, dopóki ekran jest włączony, nie jest to usługa na pierwszym planie i nie trzyma wakelocka.

Czy ktoś może mi powiedzieć, dlaczego zajmuje dużo baterii? A dlaczego tak się dzieje tylko na niektórych urządzeniach?

Oto odpowiedni kod:

public class aListenerService extends Service implements SensorEventListener
{
    private BroadcastReceiver mScreenReceiver = new BroadcastReceiver()
    {
        // if screen was turned on then register to accelerometer
        // if screen was turned off then unregister from accelerometer
    }

    private BroadcastReceiver mPhoneStateReceiver = new BroadcastReceiver()
    {
        // do something...
    }

    @Override
    public void onCreate() 
    {
        super.onCreate();

        // get sensor manager and accelerometer sensor
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        // register accelerometer sensor and receiver
        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        IntentFilter screenFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
        screenFilter.addAction(Intent.ACTION_SCREEN_ON);
        registerReceiver(mScreenReceiver, screenFilter);
        registerReceiver(mPhoneStateReceiver, new IntentFilter(INTENT_ACTION_PHONE_STATE));
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) 
    {
        super.onStartCommand(intent, flags, startId);

        return Service.START_STICKY;
    }

    @Override
    public void onDestroy() 
    {
        super.onDestroy();

        // unregister to sensor and receivers
        mSensorManager.unregisterListener(this);
        unregisterReceiver(mScreenReceiver);
        unregisterReceiver(mPhoneStateReceiver);
    }

    @Override
    public void onSensorChanged(SensorEvent event)
    {
        // do something...
    }
}

questionAnswers(1)

yourAnswerToTheQuestion