私はアプリを開発しましたが、画面に次いで 2 番目に消費量の多いプロセスであるバッテリーの消費量が多すぎると不満を言う人もいます。ただし、一部のデバイスでは、それほどバッテリーを消費しません。
私のアプリが行うすべての作業は、サービス内にあります。サービスは粘着性があり、常に実行されています (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...
}
}