O serviço de longa duração consome muita bateria

Eu desenvolvi um aplicativo e algumas pessoas reclamam que leva muita bateria, é o segundo processo mais consumidor depois da tela. No entanto, em alguns dispositivos, não consome muita bateria.

Todo o trabalho que meu aplicativo faz está em um serviço. O serviço é pegajoso e está correndo o tempo todo (o sistema android pode matá-lo quando tem recursos baixos ou pausá-lo quando o dispositivo vai dormir), ele tem ouvinte para o acelerômetro enquanto a tela está ligada, não é serviço de primeiro plano e não segura wakelock.

Alguém pode me dizer por que é preciso muita bateria? E por que isso está acontecendo apenas em alguns dos dispositivos?

Aqui está o código relevante:

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