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