Длительный сервис потребляет много батареи

Я разработал приложение, и некоторые люди жалуются, что он требует слишком много батареи, это второй самый трудоемкий процесс после экрана. Тем не менее, в некоторых устройствах он не потребляет столько батареи.

Вся работа, которую выполняет мое приложение, заключается в обслуживании. Служба зависает и работает все время (система Android может убить ее, когда у нее мало ресурсов, или приостановить ее, когда устройство переходит в спящий режим), у нее есть прослушиватель акселерометра, пока экран включен, это не служба переднего плана и не держит вейклок.

Может кто-нибудь сказать мне, почему это занимает много батареи? И почему это происходит только на некоторых устройствах?

Вот соответствующий код:

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...
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос