我开发了一个应用程序,有人抱怨它太耗电了,这是仅次于屏幕的第二大消耗过程。但是,在某些设备中,它不会消耗那么多电池。
我的应用程序所做的所有工作都在服务中。该服务是粘性的并且一直在运行(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...
}
}